django 固定装置 DateTimeField 运行时警告

问题描述 投票:0回答:3

我已经为我的 django 项目设置了一些基本装置。插入数据库的记录之一如下所示:

  {
    "model": "articles.article",
    "pk": 1,
    "fields": {
      "title": "Blackened Recordings Launches",
      "headline": "we're so psyched about our new adventure",
      "content": "<p>We like to make it a point here not to bore you with the not-so-exciting business aspects of making and sharing music, but we're so psyched about our new adventure that we just had to tell you about it as we officially launch our very own record label, Blackened Recordings.</p><p>Some of you, who have followed along throughout the years, are aware that in 1994 we renegotiated our contract with the Warner Music Group, which resulted in a joint venture with our record company for releasing all of our recordings including long form videos. Per that agreement, as of today we have taken ownership of all of our master recordings and Blackened Recordings will be the home of all of our current albums and videos along with all future releases including the December 10 release of the \"Quebec Magnetic\" DVD and Blu-ray.</p><p>You may have heard us say it once or twice or a thousand times before, but it's always been about us taking control of all things 'Tallica to give you 110% on every single level every single time. Forming Blackened Recordings is the ultimate in independence, putting us in the driver's seat of our own creative destiny. We're looking forward to making more music and getting it all out to you in our own unique way.</p>",
      "image": "examples/slide-03.jpg",
      "active": 1,
      "created_at": "2013-03-16 17:41:28"
    }
  },

这是它对应的型号:

class Article(models.Model):
    """News article, displayed on homepage to attract users"""
    class Meta:
        db_table = 'article'
    title = models.CharField(max_length=64)
    headline = models.CharField(max_length=255)
    content = models.TextField()
    image = models.ImageField(upload_to = 'articles/', null=True, blank=True)
    active = models.BooleanField()
    created_at = models.DateTimeField()
    def __unicode__(self):
        return self.title

插入夹具记录时,我收到以下警告:

/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py:827: RuntimeWarning: DateTimeField received a naive datetime (2013-03-16 17:41:28) while time zone support is active.
  RuntimeWarning)

我不知道这里出了什么问题。我尝试关注这篇博文,但我确实安装了 pytz,并且我的 settings.py 中确实有

USE_TZ=True
选项。

django runtime-error fixtures
3个回答
31
投票

其实解决方案深藏在Django docs中,引用如下:

序列化感知日期时间时,会包含 UTC 偏移量,例如 这个:

"2011-09-01T13:20:30+03:00"

这样的装置是完全接受的,就我而言是:

"2013-03-16T17:41:28+00:00"
"2013-03-17T23:36:12+00:00"
"2013-03-18T13:19:37+00:00"

输出是:

$ ./manage.py loaddata articles/fixtures/initial_data.json 
Installed 3 object(s) from 1 fixture(s)

注意,

'2013-03-16 17:41:28 UTC+0000'
不是正确的时区感知日期时间格式,它会给您以下错误:

DeserializationError: Problem installing fixture 'articles/fixtures/initial_data.json': [u"'2013-03-16 17:41:28 UTC+0000' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]

10
投票

此外,如果您使用

yaml
进行序列化,则在
datetime
中反序列化
PyYaml
时似乎存在错误:

https://code.djangoproject.com/ticket/18867

尝试使用

json
作为序列化器,或者您可以在 .yaml 文件中的日期时间周围添加引号。


2
投票

您可能应该仔细看看您的

created_at
领域(您确实了解
auto_now_add=True
?)。

我猜测你正在使用什么,所以你可以尝试类似的东西

import datetime
from django.utils.timezone import utc

Article.created_at = datetime.datetime.utcnow().replace(tzinfo=utc)

或者您可以通过设置禁用时区支持

USE_TZ = False

在你的

settings.py

或者你可以让你不知道的日期时间意识到

import datetime
import pytz
utc=pytz.UTC

#  where ever you get your datetime from
unaware = datetime.datetime(2013,3,16,17,41,28,0)

now_aware = utc.localize(unaware)
© www.soinside.com 2019 - 2024. All rights reserved.