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

时间:2015-08-24 04:06:57

标签: python google-app-engine google-cloud-datastore

我需要您的帮助来订购列出的项目。 我正在尝试制作可以向他/她的朋友发送消息的应用程序(就像社交订阅源一样)。看完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

进行排序

也许有些人可以点亮我。

1 个答案:

答案 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()

我不确定您是希望简单地按消息创建日期排序,还是希望使用日期过滤。上述两个选项都可以满足。