【发布时间】:2010-10-22 10:14:08
【问题描述】:
您好,我正在尝试构建一个应用程序,其模型类似于以下模型:-(虽然将两个模型合并为一个并使用它们很容易,但这在实际应用程序中是不可行的)
class User(db.Model):
username=db.StringProperty()
email=db.StringProperty()
class UserLikes(db.Model):
username=db.StringProperty()
food=db.StringProperty()
目标-用户登录后输入他喜欢的食物,应用程序依次返回所有其他喜欢该食物的用户。 现在假设用户 Alice 输入她喜欢 "Pizzas" ,它被存储在数据存储中。她注销并再次登录。此时,我们在数据存储中查询她喜欢的食物,然后再次查询所有喜欢该食物的用户。如您所见,这是两个数据存储查询,这不是最好的方法。我相信肯定会有更好的方法来做到这一点。有人可以帮忙吗?
[更新:-或者可以这样做,我更改第二个模型,使用户名成为一个多值属性,所有喜欢该食物的用户都可以在其中存储..但是我在这里有点不清楚]
[编辑:-您好,感谢您的回复,但我发现下面的两种解决方案都有些矫枉过正。我试着像下面那样做。请你看看这个并提出建议。我维护了相同的两个表,但是将它们更改如下:-
class User(db.Model):
username=db.StringProperty()
email=db.StringProperty()
class UserLikes(db.Model):
username=db.ListProperty(basestring)
food=db.StringProperty()
现在,当 2 个用户更新他们喜欢的相同食物时,它会被存储起来
'比萨'---->'爱丽丝','鲍勃'
我的数据库查询在这里检索数据变得非常容易
query=db.Query(UserLikes).filter('username =','Alice').get()
然后我可以像
一样对其进行迭代 for elem in query.username:
print elem
现在如果有如下两种食物:-
'pizza' ----> 'Alice','Bob'
'bacon'----->'Alice','Fred'
我使用与上面相同的查询,并遍历查询,然后是用户名。
我对此很陌生,意识到这可能是错误的。请推荐!
【问题讨论】:
标签: python google-app-engine google-cloud-datastore