我有以下内容:
class Notification(ndb.Model):
targetUser = ndb.KeyProperty()
pointRoot = ndb.KeyProperty()
followReason = ndb.StringProperty()
notificationReason = ndb.StringProperty()
sourceUser = ndb.KeyProperty() # User who caused notification to be raised
raisedDate = ndb.DateTimeProperty(auto_now_add=True)
cleared = ndb.BooleanProperty(default=False)
clearedDate = ndb.DateTimeProperty(default=None)
@classmethod
def getActiveNotificationsForUser(cls, userKey):
q = cls.query(ndb.AND(cls.targetUser == userKey, cls.cleared == False))
q.order(-cls.raisedDate)
notifications = q.fetch(10)
return notifications
我认为这应该可行,因为这不使用不等式过滤器,只使用相等过滤器。当它不起作用时,我添加了一个索引,在index.yaml中定义如下:
- kind: Notification
properties:
- name: targetUser
- name: cleared
- name: raisedDate
direction: desc
但是,getActiveNotificationsForUser仍然无法返回通知。
有谁知道为什么或我可以做些什么来解决这个问题(没有获得所有通知和python中的排序)?
提前致谢,
答案 0 :(得分:3)
与旧的db
库不同,ndb.query
对象是不可变的。因此,向现有查询添加过滤器或排序顺序将始终返回新的查询,而保留旧的查询。你应该这样做:
q = q.order(-cls.raisedDate)