我想制作像这样的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都设为Users实体的子项。有可能吗?
如果不可能,这是第二种方法:
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)
如果两者都有可能,那么成本和性能会更好吗?
答案 0 :(得分:1)
我想将friend_list和friend_pending都设为Users实体的子项。有可能吗?
是。创建实体时,可以使用“parent”参数指定实体的父(或父项)。
Google's Entity Keys部分涵盖了这一点。
示例:
#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中的Users类是专门定义的,并且具有您需要确认的其他功能。请参阅文档here。
如果两者都有可能,那么成本和性能会更好吗?
我不能肯定地说,因为我不确切知道你将如何使用这些模型,但在大多数(可能是所有)情况下,你的第一种方法会更有效率。
最后,数据存储模型的正确命名约定是将首字母大写。例如,您的朋友列表类应为“Friend_List”。