【发布时间】:2016-08-23 09:31:35
【问题描述】:
我对此不是 100% 确定,但在我看来,当使用 sortBy 和 ComputedProperty 时,NDB 查询会出现问题。
在下面的示例中,按name 排序没有按预期工作,而按numberOfProducts 排序不返回任何条目。但是,如果我按name 排序,则返回numberOfProducts 的正确值,这意味着模型本身和数据库都很好。
我的模特:
class Brand(ndb.Model):
name = ndb.StringProperty()
products = ndb.ComputedProperty(lambda self: Product.query(Product.brand==self.key).fetch(keys_only=True))
numberOfProducts = ndb.ComputedProperty(lambda self: len(self.products))
我的查询:
sortBy = Brand._properties[args['sortBy']]
query = query.order(-sortBy if args['asc'] == '0' else +sortBy)
entities, cursor, more = query.fetch_page(20, start_cursor=Cursor(urlsafe=args['cursor']))
非常感谢任何思考的理由。
【问题讨论】:
-
我建议您执行一个简单的示例,按计算属性进行查询排序。 (即删除其他可能的变量行为)并查看您是否可以正确排序。还有查询来自哪里。例如
Brand.query().order(-Brand.numberOfProducts) -
我的错误我没有提到,我完全尝试了你提到的查询,我也没有得到任何实体。我也没有收到任何错误/警告,我只是得到一个空结果。
-
那么查询是如何定义的?
-
您何时添加了计算属性,并且您是否使用数据存储查看器检查了该值是否存在于数据存储中?如果稍后添加,并且未执行 put(),则该值将不在索引中。您将看到的是作为 get() 结果计算的值。因此排序不起作用。
标签: python-2.7 google-app-engine google-cloud-datastore app-engine-ndb gcloud