Django RuntimeWarning:我的Django Python模型中的DateTimeField错误

时间:2018-10-25 09:33:01

标签: python django

我在模型中创建了一个带有DateTimeField的类,我认为这会导致我的项目出错

class Job(models.Model):
    category_id = models.ForeignKey(Category, on_delete=models.CASCADE)
    number_of_bids = models.IntegerField()
    time_starting = models.DateTimeField()
    time_ending = models.DateTimeField()

返回的错误如下

C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django-2.1.1-py3.7.egg\django\db\models\fields\__init__.py:1421: RuntimeWarning: DateTimeField Job.time_ending received a naive datetime (2018-10-25 10:03:58.889072) while time zone support is active.
  RuntimeWarning)

任何修复技巧

2 个答案:

答案 0 :(得分:0)

您正在将Python的datetime值传递到模型中。

即这个

from datetime import datetime
datetime.now() # Incompatible with Python's DateTimeField directly

您需要做的是像这样从from django.utils import timezone传递一个时区感知对象

from django.utils import timezone
timezone.now() # Will fit right into DateTimeField in your model

从文档中引用幼稚的日期时间对象
Python的datetime.datetime对象具有tzinfo属性,该属性可用于存储时区信息,表示为datetime.tzinfo子类的实例。设置此属性并描述偏移量后,就会知道datetime对象。否则,这太天真了。

您可以使用is_aware()is_naive()来确定日期时间是已知的还是幼稚的。

更多信息here

答案 1 :(得分:0)

您传递的日期时间不支持时区。您必须将时区添加到datetime字段。

如果使用python / django节省时区:

from django.utils import timezone
timezone.now()

如果要序列化数据,请使用'2018-10-25 10:03:58.889072'代替'2018-09-09T00:00:00Z'