我正在尝试使用计算属性查询ndb模型,但它返回一个空列表。 This answer表明我应该能够查询计算属性,the docs也是如此。我做错了什么?
from django.template import defaultfilters
class Video(models.SfxModel):
title = ndb.StringProperty()
slug = ndb.ComputedProperty(
lambda self: str(defaultfilters.slugify(self.title)) )
在交互式控制台中
from app.lib.videos import Video
slug = Video.query().get().slug
print slug
# => "some-dasherized-string"
print Video.query(Video.slug == slug).fetch()
# => []
答案 0 :(得分:0)
您遇到的“问题”是非eventual consistency的ancestor queries 你看到的是高复制数据存储是完全正常的。 当你放置一个实体并对它进行查询之后,它就不会被复制到所有数据中心,因此无法找到它。
如果您希望这项工作,则必须通过向实体添加父级来使用实体组。 这可以是实体密钥或不属于任何存储实体的构造密钥。
这有效:
class Video(ndb.Model):
title = ndb.StringProperty()
slug = ndb.ComputedProperty(lambda self: self.title.replace(' ', '-'))
v = Video(parent = ndb.Key(Video, 'xxx'), title = 'foo bar')
v.put()
print Video.query(Video.slug == v.slug, ancestor = ndb.Key(Video, 'xxx')).get()