Django에서는 필드에서 모델을 어떻게 정렬하고 마지막 항목을 얻습니까?

StackOverflow https://stackoverflow.com/questions/252242

문제

구체적으로, 나는 이와 같은 필드가있는 모델이 있습니다.

pub_date = models.DateField("date published")

나는 가장 최근의 물건으로 물체를 쉽게 잡을 수 있기를 원합니다. pub_date. 이 작업을 수행하는 가장 쉬운/가장 좋은 방법은 무엇입니까?

다음과 같은 일이 내가 원하는 것을할까요?

Edition.objects.order_by('pub_date')[:-1]
도움이 되었습니까?

해결책

obj = Edition.objects.latest('pub_date')

당신은 또한 넣어서 물건을 단순화 할 수 있습니다 get_latest_by 모델의 메타에서는 할 수 있습니다.

obj = Edition.objects.latest()

보다 문서 더 많은 정보를 위해서. 당신은 아마도 설정하고 싶을 것입니다 ordering 메타 옵션.

다른 팁

Harley의 답변은 특정 모델에 대한 주문 기준에 따라 최신 사례를 원하는 경우에 대한 방법이지만 일반적인 솔루션은 순서를 뒤집고 첫 번째 항목을 검색하는 것입니다.

Edition.objects.order_by('-pub_date')[0]

메모:

정상적인 Python 목록은 음수 인덱스를 수용하며, 이는 양수와 같은 시작이 아니라 목록 끝에서 오프셋을 나타냅니다. 그러나 쿼리 세트 객체가 높아집니다

AssertionError: Negative indexing is not supported.
당신이 음수 지수를 사용하는 경우, 당신은 insin이 말한 것을해야합니다. 순서를 뒤집고 잡습니다. 0th 요소.

사용에주의하십시오

Edition.objects.order_by('-pub_date')[0]

빈 쿼리 세트를 색인화 할 수 있습니다. 나는 올바른 Pythonic 접근법이 무엇인지 잘 모르겠지만, 가장 간단한 것은 if/else 또는 try/catch로 래핑하는 것입니다.

try:
    last = Edition.objects.order_by('-pub_date')[0]
except IndexError:
    # Didn't find anything...

그러나 @harley가 말했듯이 날짜에 따라 주문할 때 latest() 입니다 진닉 그것을하는 방법.

이것은 이미 답변되었지만 더 많은 참조를 위해 이것이 장고 책 쿼리 세트의 데이터 슬라이싱에 대해 말해야합니다.

음성 슬라이스는 지원되지 않습니다.

>>> Publisher.objects.order_by('name')[-1]
Traceback (most recent call last):
  ...
AssertionError: Negative indexing is not supported.

그러나 이것은 돌아 다니기 쉽습니다. 다음과 같이 order_by () 문을 변경하십시오.

>>> Publisher.objects.order_by('-name')[0]

더 자세한 내용은 링크를 참조하십시오. 도움이되기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top