我需要您的帮助来订购列出的项目。 我正在尝试制作可以向他/她的朋友发送消息的应用程序(就像社交订阅源一样)。看完Bret Slatkin谈论创建微博这里的代码:
class Message(ndb.Model):
content = ndb.TextProperty()
created = ndb.DateTimeProperty(auto_now=True)
class MessageIndex(ndb.Model):
receivers = ndb.StringProperty(repeated=True)
class BlogPage(Handler):
def get(self):
if self.request.cookies.get("name"):
user_loggedin = self.request.cookies.get("name")
else:
user_loggedin = None
receive = MessageIndex.query(MessageIndex.receivers == user_loggedin)
receive = receive.fetch()
message_key = [int(r.key.parent().id()) for r in receive]
messages = [Message.get_by_id(int(m)) for m in message_key]
for message in messages:
self.write(message)
我首先进行查询以获取在接收器中具有我姓名的所有消息。 MessageIndex是Message的子项,然后我可以获得我收到的所有消息的密钥。最后一点是我使用我得到的消息密钥列表get_by_id。
这样可以正常工作,但我希望按照创建的日期时间过滤每条消息,这就是问题所在。最终输出是列出的项目,不能使用.order或.filter
进行排序也许有些人可以点亮我。
答案 0 :(得分:2)
您可以在' IN'中使用消息键。消息查询中的子句。请注意,在这种情况下,您需要使用parent()键值,而不是id()。
例如:
# dtStart, dtEnd are datetime values
message_keys = [r.key.parent() for r in receive]
query = Message.query(Message._key.IN(message_keys), Message.created>dtStart, Message.created<dtEnd)
query = query.order(Message.created) # or -Message.created for desc
messages = query.fetch()
我不确定您是希望简单地按消息创建日期排序,还是希望使用日期过滤。上述两个选项都可以满足。