我在使用KeyProperty查询时遇到了困难,并且无法查看错误。
我的模特是
class MyList(ndb.Model):
user = ndb.KeyProperty(indexed=True)
status = ndb.BooleanProperty(default=True)
items = ndb.StructuredProperty(MyRef, repeated=True, indexed=False)
我使用适当的数据创建MyList实例,并且可以正确运行以下内容
cls = MyList
lists = cls.query().fetch()
返回
[MyList(key=Key('MyList', 12), status=True, items=..., user=Key('User', 11))]
但是当我尝试按用户过滤时失败,即查找用户等于特定实体的列表;即使使用我刚刚用于插入的那个,或者使用之前的查询结果。
key = lists[0].user
lists = cls.query(cls.user=key).fetch()
返回
[]
但使用status=True
作为过滤器可以正常工作,而且我看不到有什么遗漏?
我应该添加它发生在具有以下v3_stub
的单元测试环境中self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=0)
self.testbed.init_datastore_v3_stub(
require_indexes=True,
root_path="%s/../"%(os.path.dirname(__file__)),
consistency_policy=self.policy
)
答案 0 :(得分:0)
user=Key('User', 11)
是另一个类的关键:User
。不是MyList
也许你的意思是:
user = ndb.KeyProperty(kind='User', indexed=True)
答案 1 :(得分:0)
您的代码看起来很好,但在使用NDB进行本地开发时,我注意到了一些数据完整性问题。我复制了你的模型和代码,我最初也得到了空列表,但经过几次尝试后,数据就在那里。
尝试几次?
编辑:可能相关? google app engine ndb: put() and then query(), there is always one less item