2016-06-17 7 views
2

過去24時間から過去25時間以内のすべてのエントリを取得するためにクエリを作成しようとしています。だから、相対時間範囲のフィルタクエリ

クエリが実行された日付と時刻が06.17.2016 15:00であれば、私は06.16.2016 15:0006.16.2016 15:59

間STARTDATEを持つすべてのエントリを検索するには、__rangeを使用してみましたが、それは時間を使用して動作しないように思えます。 .filter()を使ってこれを行うことも可能ですか?ここで

は私のコードです:

class Entry(models.Model): 
    startdate = models.DateTimeField() 

-

start = timezone.now().date() - relativedelta(hours=+24) 
end = timezone.now().date() - relativedelta(hours=+25) 

list = Entry.objects.filter(startdate__gte=start, startdate__lte=end) 

編集:

リストが空のクエリセットを提供します。

編集2:

relativedelta

start = timezone.now().date() - relativedelta(hours=+24, seconds=+1) whith問題であるように思わは datetime.datetime(2016, 6, 16, 0, 59, 59)

end = timezone.now().date() - relativedelta(hours=+25, seconds=+1)は私がしたい場合は、それが機能することを修正する必要があり、私に datetime.datetime(2016, 6, 15, 22, 59, 59)

を与える私を与えます、 私は推測する。

+0

あなたのアプローチには何が問題なのですか? –

+0

何が間違っているか分かりませんが、試してみると空のクエリーセットしか得られません。 –

答えて

2

間違った範囲を計算していました。開始は24時間前、終了は25時間以内、25時間前に開始して24時間前に終了する必要があります。

start = timezone.now().date() - relativedelta(hours=+25) 
end = timezone.now().date() - relativedelta(hours=+24) 
list = Entry.objects.filter(startdate__gte=start, startdate__lte=end) 

あなたのコードに問題がある他のものは、あなたのフィールドがDateTimeFieldあるので、時間範囲を計算するtimezone.now().date()を使用してはならない、あなたは時間を扱っているので、dateは、たとえ明確に(十分な粒状ではありません)それはまだ一種のdate()を使用して作業だが、考え方は間違っている:

start = timezone.now() - relativedelta(hours=+25) 
end = timezone.now() - relativedelta(hours=+24) 

また、は常にあなたは空のクエリセットを持ったように、それは他の人を行います、質問の本文に明確にあなたの問題を明記してくださいEAどのような問題があるかを判断するためにsier。

+0

ありがとうございました!今働いて! –