如何让Django ORM反转查询结果的顺序?

57 投票
2 回答
48350 浏览
提问于 2025-04-15 14:34

在我努力理解如何对Django模型进行查询的过程中,我尝试用以下的方式获取最近添加的三个有效的头像模型:

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

但是,这个查询却给我返回了按日期排序的前三个头像,而不是我想要的最近添加的三个。我知道这应该很简单,但我在Django的文档中找不到答案:我该怎么选择最后三个头像对象,而不是前三个呢?

2 个回答

1

创建一个列表并

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
    }

上面的结果会按照发布日期从新到旧排序,然后再按照标题从小到大排序。

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

如果我们有一个Python的序列,查看seq[-5:],我们会先看到倒数第五个元素。Django不支持这种从后往前访问的方式,因为在SQL中这样做效率不高。

150

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

.order_by('-date')

撰写回答