【问题标题】:RuntimeWarning: DateTimeField myTable.test received a naive datetimeRuntimeWarning:DateTimeField myTable.test 收到一个天真的日期时间
【发布时间】:2018-02-15 19:28:28
【问题描述】:

试图将一些记录发送到我的数据库中。我按以下格式发送日期:

2017-08-06 00:41:58

但收到消息:

RuntimeWarning: DateTimeField myTable.test received a naive datetime (2017-08-06 00:41:58) while time zone support is active.

记录已正确保存,但为什么我会看到此消息?

我的模型:

class test(models.Model):       
    s_date = models.DateTimeField( verbose_name="Date" )
    s_value = models.CharField(max_length=25, verbose_name="Value")

    def __unicode__(self):
        return str(self.s_date)+'-'+str(self.s_value)

提前致谢,

【问题讨论】:

  • 我在帖子中添加了模型

标签: django python-2.7 django-models


【解决方案1】:

我在从字符串设置日期时间时遇到了这个问题(在单元测试中)。我的解决方案不是更改日期时间/时区代码,而是更改我的日期时间字符串:

旧:2018-11-08 00:00:00> 运行时警告

新:2018-11-08 00:00:00+00:00> 没有警告

我看到很多与 RuntimeWarning 相关的问题,但没有一个解决我的特定问题。

【讨论】:

    【解决方案2】:

    您收到该错误是因为在设置中您有 USE_TZ = True 这实际上意味着数据库需要时区时间

    所以在你使用过datetime的python的任何地方将其更改为django timezone time

    例子

    from django.utils import timezone
    
    time = models.DateTimeField(timezone.now())
    

    【讨论】:

    • 我想你的意思是这个timezone.now而不是这个timezone.now()
    • now 是一个函数,所以如果你想得到你需要的输出 now(),
    • 是的,没错,但如果您想将其作为默认值或这些传递,那么您将使用timezone.now
    • 如果在模型字段中传递,两者都可以正常工作,以确保我已经在模型中使用 now() :)
    • 您必须告诉我们更多您在使用什么以及在哪里使用它??
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 2016-08-19
    • 2021-02-17
    • 2014-01-29
    • 1970-01-01
    • 2014-03-28
    • 2019-08-06
    相关资源
    最近更新 更多