[django] 쿼리 세트에서 마지막 레코드 가져 오기

특정 쿼리 세트에서 마지막 레코드를 검색하려면 어떻게해야합니까?



답변

편집 : 이제 사용해야합니다 Entry.objects.latest('pub_date')


다음을 사용하여 다음과 같이 간단히 할 수 있습니다 reverse().

queryset.reverse()[0]

또한 Django 문서에서이 경고를주의하십시오.

reverse()일반적으로 정의 된 순서가있는 QuerySet에서만 호출되어야합니다 (예 : 기본 순서를 정의하는 모델에 대해 쿼리 할 때 또는를 사용할 때 order_by()). 지정된에 대해 이러한 순서가 정의되지 않은 경우 QuerySet호출 reverse()해도 실제 효과가 없습니다 (순서는 호출 전에 정의되지 않았고 reverse()나중에 정의되지 않은 상태로 유지됩니다).


답변

장고 문서 :

latest(field_name=None) 날짜 필드로 제공된 field_name을 사용하여 날짜별로 테이블의 최신 개체를 반환합니다.

이 예는 pub_date필드 에 따라 테이블의 최신 항목을 반환합니다
.

Entry.objects.latest('pub_date')


답변

가장 간단한 방법은 다음과 같습니다.

books.objects.all().last()

또한 이것을 사용하여 다음과 같이 첫 번째 항목을 가져옵니다.

books.objects.all().first()


답변

장고> = 1.6

필터와 일치하는 첫 번째 또는 마지막 개체를 반환하는 편리한 메서드 인 QuerySet 메서드 first () 및 last ()를 추가했습니다. 일치하는 개체가 없으면 None을 반환합니다.


답변

First 개체를 얻으려면 :

ModelName.objects.first()

마지막 개체를 가져 오려면 :

ModelName.objects.last()

필터를 사용할 수 있습니다

ModelName.objects.filter(name='simple').first()

이것은 나를 위해 작동합니다.


답변

쿼리 세트가 이미 소진 된 경우 다른 db 힌트를 피하기 위해 이렇게 할 수 있습니다.

last = queryset[len(queryset) - 1] if queryset else None

사용하지 마십시오 try...except.... 이 경우
장고는 던지지 않습니다 IndexError.
그것은 발생 AssertionError또는 ProgrammingError(당신이 -O 옵션으로 파이썬을 실행할 때)


답변

django 1.6 이상을 사용하는 경우 새 API가 도입되어 훨씬 쉬워졌습니다.

Model.object.earliest()

역방향으로 latest ()를 제공합니다.

추신-나는 그것의 오래된 질문을 알고, 누군가 가이 질문에 착수하는 것처럼 게시하고, 그들은이 새로운 기능을 알게되고 오래된 방법을 사용하지 않습니다.