Django에서는 필드에서 모델을 어떻게 정렬하고 마지막 항목을 얻습니까?
-
05-07-2019 - |
문제
구체적으로, 나는 이와 같은 필드가있는 모델이 있습니다.
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()
다른 팁
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]
더 자세한 내용은 링크를 참조하십시오. 도움이되기를 바랍니다!
제휴하지 않습니다 StackOverflow