【问题标题】:Object received a naive datetime (...) while time zone support is active对象在时区支持处于活动状态时收到了一个简单的日期时间 (...)
【发布时间】:2020-09-19 17:09:03
【问题描述】:

我一直在寻找这个问题的答案,但没有成功。 我正在创建一个具有名为“accessdate”的属性的对象

当我创建对象时,我会收到下一个警告

RuntimeWarning: DateTimeField Consumption.addedtime received a naive datetime (2020-06-01 13:07:47.222534) 
while time zone support is active

问题是对象接收的不是天真的日期时间,因为它的 tzinfo 填充了“欧洲/马德里”时区。

这些是我正在使用的相关导入:

import datetime
from django.utils.timezone import make_aware

这就是我创建日期时间变量的方式:

date_object = datetime.datetime.strptime(data_from_request['FECHA ACTIVACION'], '%d/%m/%Y')
# data_from_request['FECHA ACTIVACION'] = '01/01/2020'
access_date = make_aware(date_object)

这是模型:

class Consumption(models.Model):
    """Definición del modelo de Consumos"""
    ...
    accessdate = models.DateField("Fecha de acceso", auto_now=False, auto_now_add=False)
    ...

这就是我创建对象的方式

        consumption = Consumption.objects.create(
            client=client,
            rule=rule,
            course=course,
            provider=provider,
            usercode=data_from_request['CODIGO USUARIO'],
            username=data_from_request['NOMBRE USUARIO'],
            accessdate=access_date,
            billable=data_from_request['FACTURABLE'],
            status=data_from_request['VALIDADO']
        )

这怎么可能?我正在调试我的代码,当我检查“access_date”变量内容时,我可以看到 tzinfo 已填充

为什么我仍然收到此警告? 谢谢你们!

【问题讨论】:

  • addedtime 收到一个天真的未访问日期
  • 您可以在问题的模型中添加addedtime 吗?

标签: python django datetime


【解决方案1】:

所以你的消费模型可能看起来很像:

class Consumption(models.Model):
    ...
    accessdate = models.DateField("Fecha de acceso", auto_now=False, auto_now_add=False)
    ....
    addedtime = models.DateTimeField(default=datetime.now()) # this is not timezone aware

替换为

class Consumption(models.Model):
    ...
    accessdate = models.DateField("Fecha de acceso", auto_now=False, auto_now_add=False)
    ....
    addedtime = models.DateTimeField(auto_now_add=True)

仔细阅读您的错误信息!它不是关于 accessdate 而是关于属性 addedtime 可能有一些不好的默认值!

https://docs.djangoproject.com/en/3.1/ref/models/fields/#datefield了解更多信息

【讨论】:

  • 不,这是我声明属性的方式: accessdate = models.DateField("Fecha de acceso", auto_now=False, auto_now_add=False) 我会更新问题,也许这是有帮助。谢谢!
  • 但请阅读他所说的:这是关于 addedtime添加时间 != 访问日期.
  • 我编辑了我的答案,以更准确地反映 addedtime != accessdate 问题。但答案仍然成立。如果不是,我们需要查看您设置消耗的附加时间属性的部分代码。
  • 你们说的太对了!我错了。我以为错误是在访问日期,对不起。非常感谢。
猜你喜欢
  • 2012-07-18
  • 1970-01-01
  • 2018-05-14
  • 2016-10-03
  • 2019-07-23
  • 2020-10-13
  • 2020-06-19
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多