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())

これは不格好に思えます。1つの(クリーンな)QuerySetを使用して、データベースに1回だけヒットする方法があるのではないかと思います。これは可能ですか?

4

1 に答える 1

1

date前処理を行わない限り、次の呼び出しを事前に知る方法がないため、おそらく 1 回のデータベース呼び出しでは実行できないでしょう。

1 つの方法は次のとおりです。

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 に答える