0

我正在尝试使用计算属性查询 ndb 模型,但它返回一个空列表。这个答案表明我应该能够查询计算属性,文档也是如此。我究竟做错了什么?

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()
# => []
4

1 回答 1

0

您遇到的“问题”是为非祖先查询提供的最终一致性。 您所看到的对于高复制数据存储来说是完全正常的。当您放置一个实体并在它之后立即查询它时,可能是它没有复制到所有数据中心,因此无法找到它。

如果你想让它工作,你必须通过将父级添加到实体来使用实体组。这可以是实体键或不属于任何存储实体的构造键。

这有效:

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()
于 2013-03-08T21:02:18.947 回答