2012-12-18 3 views
0

이 같은 모델이 있습니다get_latest() 메소드는

from django.core import meta 

class Foo(models.Model): 
    date = models.DateTimeField() 
    name = models.CharField(maxlength=100) 

    def __unicode__(self): 
     return self.name 

    class Meta: 
     get_latest_by = 'date' 

을 그리고 난 다음에 쓰면 내가 결과

다음받을 다음

>>> from datetime import datetime 
>>> a1 = Foo(name='a1', date=datetime(2012, 12, 18)) 
>>> a1.save() 
>>> a2 = Foo(name='a2', date=datetime(2012, 12, 19)) 
>>> a2.save() 
>>> a3 = Foo(name='a3', date=datetime(2012, 12, 20)) 
>>> a3.save() 
>>> a4 = Foo(name='a4', date=datetime(2012, 12, 21)) 
>>> a4.save() 

을 쓸 수 있습니다

>>> Foo.objects.latest() 
a4 

고양이가 마지막 3 개의 개체를 얻는 방법을 알려주세요.

>>> Foo.objects.latest(count=3) 
a4, a3, a2 

같은 뭔가 다음 datebase이 매우 큰 쿼리 시간이 오래 걸리기 때문에 나는

>>> Foo.objects.all().order_by('-date') 

처럼 정렬 사용할 필요가 없습니다.

답변

3

latest()은 단지 order_by(model._meta.get_latest_by)의 바로 가기이므로 사용하면 이미 정렬됩니다. 다른 방법은 없습니다. 쿼리가 너무 느린 경우 당신은

Foo.objects.order_by('-date')[:3] 

를 사용해야합니다, 옵션은 날짜 필드에 인덱스를 추가하거나 (당신의 자동 ID를 사용하는 가정) 대신 id 필드를 사용하는 중입니다.

Foo.objects.order_by('-id')[:3] 

은 검색어 세트가 조각 작업에 과부하가 있습니다, 그래서 이것은 SQL 아니라 모든 레코드를 선택하고 다음 응용 프로그램 측에서 처음 3를 복용에 ...LIMIT 3로 변환합니다.

+0

정보를 제공해 주셔서 감사 드리며,이 문제를 계속 해결해 드리겠습니다. – zen11625

관련 문제