一个一对多的关系,谷歌数据存储的Python
问题描述:
我有一个像下面两种型号: -一个一对多的关系,谷歌数据存储的Python
class Food(db.Model):
foodname=db.StringProperty()
cook=db.StringProperty()
class FoodReview(db.Model):
thereview=db.StringProperty()
reviews=db.ReferenceProperty(Food,collections_name='thefoodreviews')
我继续前进,创造一个实体: -
s=Food(foodname='apple',cook='Alice')`
s.put()
当有人写了审查,功能如下:
theentitykey=db.Query(Food,keys_only=True).filter('foodname =','apple').get()
r=FoodReview()
r.reviews=theentitykey #this is the key of the entity retrieved above and stored as a ref property here
r.thereview='someones review' #someone writes a review
r.put()
现在的问题是如何检索这些评论。如果我知道实体的键,我可以做如下: -
theentityobject=db.get(food-key) # but then the issue is how to know the key
for elem in theentityobject.thefoodreviews:
print elem.thereview
我可以做这样的事情: -
theentityobj=db.Query(Food).filter('foodname =','apple').get()
然后如上重复,但上述两种方法是正确的?
答
如果要获得食物,你总是在做db.Query(Food).filter('foodname =','apple'),那么它看起来像你的食物名是你的钥匙... 为什么不只是使用它作为key_name?
然后,你甚至可以获取审查不获取食物本身:
key = db.Key.from_path('food', 'apple')
reviews = FoodReview.all().filter("reviews =", key)
答
第二种方法看起来完全像AppEngine教程的建议。 如果您想查找特定食物名称的所有评论,似乎是正确的做法。
谢谢叶兰!这绝对看起来不错,而且工作得很好。 – Rasmus 2010-10-29 01:26:00