Back-reference

ReferencePropertyのBack-reference(逆参照)を試してみた。

from google.appengine.ext import db

class FirstModel(db.Model):
 prop = db.IntegerProperty()

class SecondModel(db.Model):
 ref = db.ReferenceProperty(FirstModel)

obj1 = FirstModel(prop = 42)
obj1.put()

obj2 = SecondModel(ref = obj1)
obj2.put()

#for obj in obj1.FirstModel_set:   #error. サンプル通り書いたつもりだけどダメ。
# print obj

for obj in obj1.secondmodel_set:   #OK
 print obj

#for obj in obj1.SecondModel_set:   #error. 小文字じゃないとダメらしい。
# print obj

これで動くみたい。
ドキュメントを読む限りでは、for obj in obj1.FirstModel_set と書くべきのように見えるのだけど、そういうわけではなさそう。もちろん、この書き方だと非常に不便というか筋が通らないので、おかしいなーと思いつつ検証してみたらやっぱりおかしかった。