1
orders = Order.objects.filter(date__range=[datetime.datetime.now(), datetime.timedelta(days=1)])

これは私が望むことを正確に実行しないと思いますが、これをPythonシェルに入力すると、この警告が表示され続けます。

RuntimeWarning: DateTimeField received a naive datetime (2012-08-26 02:03:25.614372) while time zone support is active.
4

3 に答える 3

9

これはあなたを助けるかもしれません:リンク。私はこのコードをチェックしませんでしたが:

import datetime
yesterday = datetime.date.today() - datetime.timedelta(days=1)
orders = Order.objects.filter(date__gt=yesterday)

日付フィールドに昨日の日付が含まれているすべての注文が表示されます。将来からの注文がないため、これでうまくいく可能性があります。

于 2012-08-26T09:28:04.417 に答える
2

Djangoのdatetimeオブジェクトがタイムゾーンをサポートするようになりました。datetime.datetime.now()ナイーブオブジェクトを返します(タイムゾーンなし)。datetime.datetime.now()それらを比較するには、タイムゾーンを認識する必要があります。

インスタンスをタイムゾーン対応django.utils.timezoneにするためのAPIを備えたを使用できます。datetime.datetime

例えば:

from django.utils import timezone

timezone.make_aware(datetime_object, tzinfo_object)

Djangoタイムゾーンを参照してください

于 2012-08-26T09:25:45.167 に答える
1

タイムゾーン対応の日付で作業している場合は、その日の最初の瞬間を取得し、それでフィルタリングすることをお勧めします。

dt = timezone.now()
start = dt.replace(hour=0, minute=0, second=0, microsecond=0)
Order.objects.filter(created__gte=start)

たとえば昨日のような別の日からの注文が必要な場合、それは非常に簡単であることに注意してください。

dt = timezone.now() - timedelta(days=1)
start = dt.replace(hour=0, minute=0, second=0, microsecond=0)
end = dt.replace(hour=23, minute=59, second=59, microsecond=999999)
Order.objects.filter(created__range=(start, end))

ソースはこちら

于 2021-01-15T14:08:26.947 に答える