program tip

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

radiobox 2020. 10. 20. 07:30
반응형

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


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


다음을 사용하여 다음과 같이 간단히 할 수 있습니다 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')

장고> = 1.6

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


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

books.objects.all().last()

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

books.objects.all().first()

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 ()를 제공합니다.

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


현재 순서에 대해 걱정할 필요없이 가장 간단한 방법은 Python의 일반적인 음수 인덱싱을 사용할 수 있도록 QuerySet을 목록으로 변환하는 것입니다. 이렇게 :

list(User.objects.all())[-1]

참고 URL : https://stackoverflow.com/questions/2191010/get-last-record-in-a-queryset

반응형