ReferenceProperty で参照しているエンティティ群は「後方参照」で逆参照できる
後方参照を使えば、よりシンプルなプログラムを書くことができるようです。
次のような ReferenceProperty を用いたモデルが定義されているとします。
# # models.py # from google.appengine.ext import db class Site(db.Model): name = db.StringProperty() class Article(db.Model): title = db.StringProperty() site = db.ReferenceProperty(Site) # Site を参照
特定の Site エンティティを参照している Article エンティティ群を取得したい。
今までは最初に Site エンティティを取得して、それを引数に、Query.filter() メソッドで Article エンティティ群を取得していました。
import models # 特定の Site エンティティを取得 site = models.Site.all().filter('name =', u'ShobonEngineの日記').get() # |site| を参照している Article エンティティ群を取得 article_query = models.Article.all().filter('site =', site) for article in article_query: print article.title
ReferenceProperty の後方参照という機能を使えば、Site エンティティを参照している Article エンティティ群を直接取得することができます。
import models # 特定の Site エンティティを取得 site = models.Site.all().filter('name =', u'ShobonEngineの日記').get() # |site| を参照している Article エンティティ群を取得 for article in site.article_set: # 後方参照プロパティ print article.title
後方参照プロパティは modelname_set(小文字のモデルクラス名の後に「_set」を付けたもの)で得られる Query インスタンスです。
したがって、site.article_set で Article 群の Query が取得されます。
Query インスタンスが返されるので、site.article_set.order('title') といった使い方ができます。
参考:http://code.google.com/intl/ja/appengine/docs/python/datastore/entitiesandmodels.html#References
- 作者: Dan Sanderson,玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/01/24
- メディア: 大型本
- 購入: 5人 クリック: 414回
- この商品を含むブログ (27件) を見る