【问题标题】:How can I tell the Django ORM to reverse the order of query results?如何告诉 Django ORM 反转查询结果的顺序?
【发布时间】:2026-01-14 14:05:02
【问题描述】:

为了了解对 Django 模型的查询,我一直在尝试使用如下查询获取最后 3 个添加的有效 Avatar 模型:

newUserAv = Avatar.objects.filter(valid=True).order_by("date")[:3]

但是,这反而给了我按日期排序的前三个头像。我确信这很简单,但我在 Django 文档中找不到它:如何选择 last 三个头像对象而不是前三个?

【问题讨论】:

    标签: python django


    【解决方案1】:

    在字段名称前加一个连字符。

    .order_by('-date')
    

    【讨论】:

    【解决方案2】:

    创建列表并

    def messages_to_list(messages):
        result = []
        for message in messages:
            result.append(message_to_list(message))
        result.reverse()
        return result
    
    def message_to_list(message):
        return {
        'member': str(message.member),  
        'message': str(message.message),
        'pub_date': str(message.pub_date.strftime(" %B %d,%Y, %A %I:%M%p ")),
        'admin': message.admin
        }
    

    上面的结果将按 pub_date 降序排列,然后按标题升序排列。

    Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
    

    如果我们有一个 Python 序列并查看 seq [-5:],我们会首先看到第五个(最后一个)元素。 Django 不支持这种访问模式(从头开始切片),因为它不能在 SQL 中有效地完成。 ((((((((()((((((((((((((((((((((()))

    【讨论】: