通过KeyProperty查询ndb



我正在努力与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
)

user=Key('User', 11)是另一个类:User的键。非MyList

也许你的意思是:

user = ndb.KeyProperty(kind='User', indexed=True)

你的代码看起来很好,但我注意到一些数据完整性问题,在本地开发与NDB。我复制了你的模型和代码,一开始我也得到了空列表,但经过几次尝试后,数据就在那里了。

试几次?

可能相关?Google应用引擎ndb: put()然后query(),总是少一个项目

最新更新