如何从Django查询集中获取第一个对象?

时间:2018-01-19 20:43:12

标签: django

execution_list = JobExecution.objects.filter(job__name=job_name).order_by('-build_id')[:50]
last = execution_list.pop(1)
print last.id

我还尝试了execution_list [0],这会引发另一个查询集错误。

我如何从查询集中获取第一个对象?我知道我可以将.last()附加到查询中,但问题是我需要完整列表以及第一项。我在这里做错了什么?

Error: 'QuerySet' object has no attribute 'pop'

3 个答案:

答案 0 :(得分:1)

您可以使用.first()

例如

JobExecution.objects.filter(job__name=job_name).order_by('-build_id').first()

将返回具有最大build_id

的JobExecution对象

请注意,您无法切片,然后抓取.first(),因为这不能很好地转换为SQL,但您可以执行类似

的操作
queryset = JobExecution.objects.filter(job__name=job_name).order_by('-build_id')
first_50 = queryset[:50] # this will not evaluate the queryset
first = queryset.first() # this will evaluate the queryset

答案 1 :(得分:0)

即使切片[:50],它仍会返回QuerySet而不是列表。你可以说last = list(execution_list)[0],它只会给你第一个元素。请注意,这也会立即执行查询。

答案 2 :(得分:0)

您可以将查询集转换为列表,然后弹出最后一项。

execution_list = list(JobExecution.objects.filter(job__name=job_name).order_by('-build_id')[:50])
last = execution_list.pop(0)

请注意,我已使用pop(0)从列表中获取第一项 - pop(1)会弹出列表中的第二项,因为列表是零索引的。