如果我们有通常的博客文章webapp,许多用户可以发布博客条目,但我们也想从单个用户检索所有条目,我会想象以下数据结构:
class Blog_Entries(ndb.Model):
...
class Users(ndb.Model):
...
blog_entries = ndb.StructuredProperty(Blog_Entries, repeated=True)
...
但是,问题是当您将“Blog_Entries”对象复制到Users.blog_entries时,密钥将丢失(不会从原始实例复制)。这使得更新帖子和保持一致性很麻烦。
有没有办法避免这种情况?有没有更好的策略来解决这个问题?
提前致谢
答案 0 :(得分:3)
你可以继承StructuredProperty
并覆盖它的_serialize()
和_deserialize()
方法来序列化/反序列化密钥。您可以使用KeyProperty
来处理密钥的序列化。 ; - )击>
我刚发现LocalStructuredProperty
有一个选项keep_keys
。正如选项的名称所暗示的那样,它存储嵌套模型的键。
class Organization(ndb.Model):
name = ndb.StringProperty()
class Employee(ndb.Model):
name = ndb.StringProperty()
organization = ndb.LocalStructuredProperty(Organization,
keep_keys=True)
linux_foundation = Organization(name='Linux Foundation')
linux_foundation.put()
linus = Employee(name='Linus Torvalds', organization=linux_foundation)
linus_key = linus.put()
ndb.get_context().clear_cache()
linus = linus_key.get()
assert linus.organization.key.get().name == 'Linux Foundation'
答案 1 :(得分:0)
尝试blog_entries = ndb.KeyProperty(kind =" Blog_Entries",重复= True)