首页 > 解决方案 > 在一个查询中获取第一项和最后一项

问题描述

我想在 Django 中获取第一项和最后一项。我当前的代码如下所示:

first = Article.objects.order_by('date').first()
last = Article.objects.order_by('date').last()

但是,这是两个查询。有没有办法从中进行一个查询?

标签: pythondjango

解决方案


您可以合并两个查询集。由于仅在必要时评估这些查询集,因此不会评估单个查询集,例如:

qs = Article.objects.order_by('date')[:1].union(Article.objects.order_by('-date')[:1])

qs将包含两个元素,因此我们可以通过以下方式获取文章:

a1, a2 = Article.objects.order_by('date')[:1].union(Article.objects.order_by('-date')[:1])

尽管就个人而言,我认为这只会带来很多额外的混乱。

鉴于该表可能包含零个或一个元素,这甚至会使其变得更加困难,在这种情况下,我们需要:

qs = list(Article.objects.order_by('date')[:1].union(
    Article.objects.order_by('-date')[:1],
    all=True)
)
if qs:
    a1, a2 = qs
else:
    a1 = a2 = None

但正如@JonClemens所说,优化可能不会那么大,特别是与您为阅读本文而引入的复杂性相比。


推荐阅读