如何修复 RuntimeWarning:DateTimeField 在时区支持处于活动状态时收到天真> datetime?
Posted
技术标签:
【中文标题】如何修复 RuntimeWarning:DateTimeField 在时区支持处于活动状态时收到天真> datetime?【英文标题】:how to fix RuntimeWarning: DateTimeField received a naive > datetime while time zone support is active? 【发布时间】:2017-12-05 21:51:09 【问题描述】:完整的回溯
C:\Users\P.A.N.D.E.M.I.C\Desktop\td11\lib\site-packages\django\db\models\fields__init__.py:1451: RuntimeWarning: DateTimeField UserProfile.key_expires 收到一个幼稚的 datetime (2017-07-04 14:18:43) 时区支持处于活动状态。 运行时警告)
这是我的用户资料模型
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
slug = models.SlugField(unique=False, default=None, blank=True)
activation_key = models.CharField(max_length=90, default=None, blank=True)
key_expires = models.DateTimeField(default=None)
这是视图
profile = UserProfile.objects.create(
user=user,
slug=username,
key_expires=datetime.datetime.strftime(timezone.now() + datetime.timedelta(days=2), "%Y-%m-%d %H:%M:%S"),
activation_key=get_secret_key
)
【问题讨论】:
【参考方案1】:当时区支持处于活动状态时,您确实应该使用timezone.now()
。
但是不需要用字符串初始化 DateTimeField,Django 会直接处理 datetime 对象。
因此,要保持 tz 感知日期时间,您应该编写:
from django.utils import timezone
profile = UserProfile.objects.create(
user=user,
slug=username,
key_expires=timezone.now() + datetime.timedelta(days=2),
activation_key=get_secret_key
)
【讨论】:
以上是关于如何修复 RuntimeWarning:DateTimeField 在时区支持处于活动状态时收到天真> datetime?的主要内容,如果未能解决你的问题,请参考以下文章
如何阻止 python RuntimeWarning 打印到终端? [复制]
RuntimeWarning:协程“Messageable.send”从未等待 python.py
Pycharm 更新到 2016.2 后导入 RuntimeWarning
Django 中 DateField 的 RuntimeWarning