Django에서 필터로 최신 기록 가져 오기


90

최신 Django 모델 개체를 얻으려고하지만 성공할 수 없습니다.

둘 다 작동하지 않습니다.

obj = Model.objects.filter(testfield=12).latest()
obj = Model.objects.latest().filter(testfield=12)

3
당신은 시도 :obj= Model.objects.filter(testfield=12).order_by('-id')[:1]
캐서린

@catherine, 매력처럼 작동합니다! :디. 내가 확인할 수 있도록 답으로 작성 하시겠습니까?
doniyor

2018 년 NewsPostImage.objects.filter(newsPostTarget=img_id).first(). 도움이되기를 바랍니다.
Ngatia Frankline 2019

답변:


101
obj= Model.objects.filter(testfield=12).order_by('-id')[0]

10
@DaveMerwin은 올바르지 않습니다. 이 문제를 해결하는 방법에는 여러 가지가 있으며이 답변과 다른 답변이 모두 맞습니다.
Jordan

1
이것은 id가 시퀀스 된 기본 키 정수라고 가정합니다. 일반적으로 django의 기본값이지만 때로는 그렇지 않습니다.
dalore

2
필터는 빈리스트 반환 할 수 있기 때문에 위험 할 수
킹스턴 찬

'-id'는 순서를 반대로하는 데 사용됩니다!
Indra

3
어쩌면 [0] 대신 .first ()?
fevgenym

119

django의 문서를 참조하십시오 : https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

latest ()에 필드를 지정해야합니다. 예.

obj= Model.objects.filter(testfield=12).latest('testfield')

또는 모델의 Meta가 get_latest_by를 지정하는 경우 field_name인수를 earliest() or latest(). Django는 get_latest_by기본적으로 지정된 필드를 사용합니다 .


2
"testfield"는 날짜 필드 여야합니까?
tani-rokk 2015-10-29


17

latest실제로 날짜 필드와 함께 작동하도록 설계되었습니다 (아마도 다른 총 주문 유형에서도 작동하지만 확실하지는 않습니다). 필드 이름을 지정하지 않고 사용할 수있는 유일한 방법은 여기에get_latest_by 언급 된 메타 속성 을 설정하는 입니다.


8
기본 키와 함께 작동합니다. 항상 다음과 같이 할 수 있습니다.Model.objects.latest('id')
Ander

6

obj= Model.objects.filter(testfield=12).order_by('-id')[:1] 올바른 솔루션입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.