我想要交友系统有这样的db模型:
class Users(ndb.Model):
username = ndb.StringProperty(required = True)
bio = ndb.StringProperty()
class friend_list(ndb.Model):
list = ndb.StringProperty(repeated=True)
class friend_pending(ndb.Model):
list = ndb.StringProperty(repeated=True)
friend_pending是尚未被接受的朋友的典范。而friend_list是被接受的朋友的模型。
我想让friend_list和friend_pending都成为用户实体的子实体。有可能吗?
如果不可能的话,下面是第二种方法:
class Users(ndb.Model):
username = ndb.StringProperty(required = True)
bio = ndb.StringProperty()
class friend_list(ndb.Model):
user_username = ndb.StringProperty(required = True)
list = ndb.StringProperty(repeated=True)
class friend_pending(ndb.Model):
user_username = ndb.StringProperty(required = True)
list = ndb.StringProperty(repeated=True)
如果两者都有可能,哪一个对成本和性能更好?
发布于 2015-08-25 03:17:14
我想让friend_list和friend_pending都成为用户实体的子实体。有可能吗?
是。创建实体时,可以使用“父”参数为实体指定父(或父)。
谷歌的实体钥匙部分很好地介绍了这一点。
示例:
#Create User entity
#This code assumes you're using GAE's built-in user's class
user = users.User("Albert.Johnson@example.com")
user.put()
#Create a friend list and set its parent to the user we create above
friend_list = Friend_List(parent=user)
#Save to datastore
friend_list.put()
请记住,GAE中的User类是专门定义的,并且有您需要确认的附加功能。请参阅文档这里。
如果两者都有可能,哪一个对成本和性能更好?
我不能肯定地说,因为我不知道您将如何使用这些模型,但在大多数情况下(可能全部),您的第一种方法将更有效。
最后,Datastore模型的正确命名约定是将第一个字母大写。例如,您的朋友列表类应该是"Friend_List“。
https://stackoverflow.com/questions/32194505
复制相似问题