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'
答案 0 :(得分:1)
您可以使用.first()
例如
JobExecution.objects.filter(job__name=job_name).order_by('-build_id').first()
将返回具有最大build_id
请注意,您无法切片,然后抓取.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)
会弹出列表中的第二项,因为列表是零索引的。