gpt4 book ai didi

当时区支持处于事件状态时,Django DateTimeField 收到了一个天真的日期时间

转载 作者:行者123 更新时间:2023-12-04 15:33:32 25 4
gpt4 key购买 nike

我正在使用 Django 2.2

在我的应用程序中,时区支持由 启用USE_TZ=真在设置文件中。

我有带 的模型日期时间 领域created .

我需要根据日期过滤数据。日期可以由用户提供,否则默认为now() .

这就是我正在做的

from datetime import datetime, timedelta
from django.utils import timezone

class Generator:

def __init__(self, start_date=None, end_date=None):

if end_date:
self.end_date = datetime.strptime(end_date, '%Y-%m-%d').date()
else:
self.end_date = timezone.now().date()

if start_date:
self.start_date = datetime.strptime(start_date, '%Y-%m-%d').date()
else:
self.start_date = self.end_date - timedelta(days=7)

def get_query(self, d):

query = MyModel.objects.filter(
d__in=d,
created__gte=start_date,
created__lte=end_date
)

return query

但这是给错误
RuntimeWarning: DateTimeField MyModel.created received a naive datetime (2020-02-28 00:00:00) while time zone support is active.

我怎样才能解决这个问题?

最佳答案

启用时区支持后,数据库层希望仅从您的代码中接收可感知的日期时间。当它收到一个简单的日期时间时会发生此警告。这表明您还没有完成移植代码以支持时区。检查 documentation .

您需要使用 make_aware() 将原始日期时间更改为您的项目时区日期时间功能。为此,您必须像下面这样更新您的代码。

from datetime import datetime, timedelta
from django.utils import timezone

class Generator:

def get_mytimezone_date(original_datetime):
new_datetime = datetime.strptime(original_datetime, '%Y-%m-%d')
tz = timezone.get_current_timezone()
timzone_datetime = timezone.make_aware(new_datetime, tz, True)
return timzone_datetime.date()

def __init__(self, start_date=None, end_date=None):

if end_date:
self.end_date = self.get_mytimezone_date(end_date)
else:
self.end_date = timezone.now().date()

if start_date:
self.start_date = self.get_mytimezone_date(start_date)
else:
self.start_date = self.end_date - timedelta(days=7)

def get_query(self, d):

query = MyModel.objects.filter(
d__in=d,
created__gte=start_date,
created__lte=end_date
)

return query

我希望这能帮到您 :)

关于当时区支持处于事件状态时,Django DateTimeField 收到了一个天真的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60561928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com