嗨我想建立一個應用程序,其模型類似於下面的: - (雖然它很容易將兩個模型合併成一個並使用它們,但這是不可行的在實際的應用程序)建模的谷歌數據存儲/ python
class User(db.Model):
username=db.StringProperty()
email=db.StringProperty()
class UserLikes(db.Model):
username=db.StringProperty()
food=db.StringProperty()
登錄後objective-用戶輸入自己喜歡,進而應用程序返回所有其他用戶誰喜歡食物的食物。 現在假設用戶Alice輸入她喜歡的「Pizzas」,它將被存儲在數據存儲區中。她註銷並重新登錄。此時,我們向數據存儲庫查詢她喜歡的食物,然後再次查詢所有喜歡該食物的用戶。如你所見,這是兩個數據存儲查詢,這不是最好的方法。我相信肯定會有更好的方式來做到這一點。有人可以請幫助。
[更新: - 或者可以這樣做,我改變第二個模型,使用戶名變成一個多值屬性,其中所有用戶都喜歡那個食物可以存儲..但是我有點不清楚]
[編輯:-Hi感謝您的回覆,但我發現這兩個解決方案在這裏有點矯枉過正。我試着像下面這樣做。請你看看這個和善意的建議。我保持相同的兩個表,但是改變了他們象下面這樣: -
class User(db.Model):
username=db.StringProperty()
email=db.StringProperty()
class UserLikes(db.Model):
username=db.ListProperty(basestring)
food=db.StringProperty()
現在,當用戶更新同樣的食物,他們喜歡,它就會像存儲
「比薩」 ---->「愛麗絲」 ,「鮑勃」
而且我的數據庫查詢檢索數據變得很容易在這裏
query=db.Query(UserLikes).filter('username =','Alice').get()
,我就可以遍歷,就像這樣
for elem in query.username:
print elem
現在,如果有喜歡的下面兩種食物: -
'pizza' ----> 'Alice','Bob'
'bacon'----->'Alice','Fred'
我用的是相同的查詢同上,迭代查詢,然後將用戶名。
我對此很新,意識到這可能是錯誤的。請推薦!
該鏈接的精彩教程..謝謝..請在上面的帖子中看看我編輯的解決方案。我相信我應該做些簡單的事情! – Rasmus 2010-10-22 17:50:41
你有效地做我建議的。最大的區別之一是您正在使用屬性來存儲'food'的值而不是使用key_name。當您嘗試查找喜歡食物'x'的所有用戶時,使用key_name會更有效率。但是,如果您的列表中將包含超過幾千個用戶,則最容易包含一個屬性。確保您使用的是Appstats(http://code.google.com/appengine/docs/python/tools/appstats.html),以便您可以準確瞭解幕後發生的情況。 – 2010-10-24 04:49:12
Thanks!Robert .. – Rasmus 2010-10-26 02:20:31