Google 应用引擎 - 订购列出的项目

Google app engine - Order listed item

我需要你的帮助来订购所列商品。 我正在尝试制作可以向 his/her 朋友发送消息的应用程序(就像社交信息流一样)。看完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

也许你们中的一些人可以点亮我。

您可以在消息查询的 '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()

我不确定您是希望简单地按消息创建日期排序,还是希望使用日期进行过滤。以上两种选择均适用。