带有Computed Property的NDB Query返回一个空白列表

时间:2013-03-08 20:40:50

标签: django google-app-engine

我正在尝试使用计算属性查询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()
# => []

1 个答案:

答案 0 :(得分:0)

您遇到的“问题”是非eventual consistencyancestor 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()