一个一对多的关系,谷歌数据存储的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) 
+0

谢谢叶兰!这绝对看起来不错,而且工作得很好。 – Rasmus 2010-10-29 01:26:00

第二种方法看起来完全像AppEngine教程的建议。 如果您想查找特定食物名称的所有评论,似乎是正确的做法。