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 に答える