【发布时间】:2026-01-14 14:05:02
【问题描述】:
为了了解对 Django 模型的查询,我一直在尝试使用如下查询获取最后 3 个添加的有效 Avatar 模型:
newUserAv = Avatar.objects.filter(valid=True).order_by("date")[:3]
但是,这反而给了我按日期排序的前三个头像。我确信这很简单,但我在 Django 文档中找不到它:如何选择 last 三个头像对象而不是前三个?
【问题讨论】:
为了了解对 Django 模型的查询,我一直在尝试使用如下查询获取最后 3 个添加的有效 Avatar 模型:
newUserAv = Avatar.objects.filter(valid=True).order_by("date")[:3]
但是,这反而给了我按日期排序的前三个头像。我确信这很简单,但我在 Django 文档中找不到它:如何选择 last 三个头像对象而不是前三个?
【问题讨论】:
在字段名称前加一个连字符。
.order_by('-date')
【讨论】:
.order_by('-date')还是.order_by('date').reverse()更喜欢使用?
创建列表并
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 中有效地完成。 ((((((((()((((((((((((((((((((((()))
【讨论】: