【问题标题】:how to fix RuntimeWarning: DateTimeField received a naive > datetime while time zone support is active?如何修复 RuntimeWarning:DateTimeField 在时区支持处于活动状态时收到天真> datetime?
【发布时间】: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
                )

【问题讨论】:

    标签: django datetime django-views


    【解决方案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
    )
    

    【讨论】:

      猜你喜欢
      • 2019-07-23
      • 1970-01-01
      • 2020-06-19
      • 2016-10-03
      • 2014-12-03
      • 1970-01-01
      • 2012-07-18
      • 2020-09-19
      • 2020-10-13
      相关资源
      最近更新 更多