0

假设我有一组模型对象,每个对象都标有日期和时间。我想选择日期在过去的所有项目,以及最接近今天但在未来的项目。到目前为止,我有这个:

from django.utils.timezone import now
from models import Resource

next = Resource.objects.filter(date__gt=now()).reverse()[0]
archive = Resource.objects.filter(date__lt=now())

这似乎很笨拙。我想知道是否有一种方法可以使用一个(干净的)QuerySet 只访问数据库一次。这可能吗?

4

1 回答 1

1

您可能无法通过一个数据库调用来完成它,因为date除非您进行一些预处理,否则无法提前知道下一个将是什么。

一种方法是:

next = Resource.objects.filter(date__gt=now()).order_by('date')[:1]
archive = Resource.objects.filter(date__lt=now())
qs = list(chain(archive, next))

或者

qs = list(archive, next)

另一种涉及快速查找的方法是

dt = None
now = now()

next = Resource.objects.filter(date__gt=now()).order_by('date')[:1]
if next.exists(): #A quick lookup for the date
    now = next[0].date

archive = Resource.objects.filter(date__lt=now).order_by('date')
于 2013-07-12T22:03:37.190 回答