orders = Order.objects.filter(date__range=[datetime.datetime.now(), datetime.timedelta(days=1)])
我想这并不能完全符合我的要求,但是当我在我的python shell中键入它时,我会继续收到此警告。
RuntimeWarning: DateTimeField received a naive datetime (2012-08-26 02:03:25.614372) while time zone support is active.
答案 0 :(得分:7)
这可能会对您有所帮助:link。 我没有检查这段代码,但是:
import datetime
yesterday = datetime.date.today() - datetime.timedelta(days=1)
orders = Order.objects.filter(date__gt=yesterday)
它将带来所有订单,其中日期字段包含昨天的日期。由于您将来没有订单,这可能会有效。
答案 1 :(得分:2)
Django的datetime对象现在支持时区。 datetime.datetime.now()
返回天真的对象(没有时区)。要比较它们,您需要datetime.datetime.now()
时区感知。
您可以使用django.utils.timezone
,其中包含用于使datetime.datetime
实例感知时区的API。
例如:
from django.utils import timezone
timezone.make_aware(datetime_object, tzinfo_object)
答案 2 :(得分: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))
来源here