3

嗨,我有一个这样的模型:

from datetime import datetime


class Project(models.Model):
    created = models.DateTimeField(editable=False)
    updated = models.DateTimeField(editable=False)
    product = models.ForeignKey('tool.product')
    module = models.ForeignKey('tool.module')
    model = models.ForeignKey('tool.model')
    zipcode = models.IntegerField(max_length=5)

    def save(self, **kwargs):
        if not self.id:
            self.created = datetime.now()
        self.updated = datetime.now()
        super(Project, self).save()

    def __unicode__(self):
        return self.id

但是,当我尝试保存项目时,我得到:

coercing to Unicode: need string or buffer, long found

并从运行服务器:

RuntimeWarning: DateTimeField received a naive datetime (2012-10-31 14:45:36.611622) while time zone support is active.

我不确定到底是什么问题,但我假设它与timezone妨碍保存DateTimeField.

任何帮助将非常感激。

4

2 回答 2

4

首先 DateTimeField 支持这样的自动更新:

created = models.DateTimeField(editable=False, auto_now_add=True) # Only on creation
updated = models.DateTimeField(editable=False, auto_now=True)     # On every save

其次,您获得的 RuntimeWarning 意味着您已在 settings.py 时区感知日期时间对象中启用,例如您将看到以下内容:

USE_TZ = True

当你这样做时,你必须以不同的方式对待 datetime 对象,你必须显式地传递一个tzinfo值。

# install the `pytz` module through pip or whatnot
from pytz import timezone
import datetime
from django.utils.timezone import utc

now = datetime.datetime.utcnow().replace(tzinfo=utc)

# To show the time in Greece
athens = timezone('Europe/Athens')
print now.astimezone(athens)

有关更多信息,请参阅django 文档pytz 文档

关于coercing to Unicode:错误,请尝试这样做:

def __unicode__(self):
    return unicode(self.id)
于 2012-10-31T19:55:18.937 回答
0

now在创建时所做的存储是使用defaultDateTimeField 的属性和Django 的 now() 包装器,如下所示:

from django.utils import timezone

ctime = models.DateTimeField(default=timezone.now)

请注意,此日期是 UTC 时区,如果您需要设置其他时区,请使用timezone.now调用localtime()的 lambda

于 2014-03-04T06:22:53.487 回答