Python Django中的get_latest()方法,用于获取少量对象

Python Django中的get_latest()方法,用于获取少量对象,python,sql,django,Python,Sql,Django,我有一个这样的模型: 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 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
注意:我不必使用排序,比如

>>> Foo.objects.all().order_by('-date')
因为数据库非常大,而且查询需要很长时间。

latest()
只是
order\u by(model.\u meta.get\u latest\u by)
的快捷方式,所以在使用它时,排序已经发生了。也没有别的办法。你需要使用

Foo.objects.order_by('-date')[:3]
如果查询速度太慢,您可以选择在日期字段中添加索引,或者改用
id
字段(假设您使用的是自动id)

请注意,查询集重载了切片操作,因此这将转换为SQL中的
…限制3
,而不是选择所有记录,然后在应用程序端取前3个记录。

latest()
只是
order\u by(model.\u meta.get\u latest\u by)的快捷方式
因此,当您使用它时,排序已经发生了。也没有别的办法。你需要使用

Foo.objects.order_by('-date')[:3]
如果查询速度太慢,您可以选择在日期字段中添加索引,或者改用
id
字段(假设您使用的是自动id)


请注意,QuerySet重载了切片操作,因此这将转换为SQL中的
…限制3
,而不是选择所有记录,然后在应用程序端取前3个记录。

非常感谢您提供的信息,我将继续处理此问题。非常感谢您提供的信息,我会继续处理这个问题。