2010-10-28 94 views
1

我有一個像下面兩種型號: -一個一對多的關係,谷歌數據存儲的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() 

然後如上重複,但上述兩種方法是正確的?

回答

1

如果要獲得食物,你總是在做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

0

第二種方法看起來完全像AppEngine教程的建議。 如果您想查找特定食物名稱的所有評論,似乎是正確的做法。

相關問題