DateTimeField默认填充服务器重启时间,而不是实际的对象创建时间

时间:2014-02-13 00:04:47

标签: django datetime

我正在修复Django 1.5项目中的错误。有一个带有DateTimeField的模型,但它的日期时间错误了:

class Activity(models.Model):
    date = models.DateTimeField(default=django.utils.timezone.now())

数据库确实收到自USE_TZ = True以来的UTC时间戳,但它似乎是在服务器重启时固定的,而不是实际的事件时间:

select id,date from activity;
 id  |             date              
-----+-------------------------------
 447 | 2014-02-12 15:16:01.886809-08
 448 | 2014-02-12 15:16:01.886809-08
 446 | 2014-02-04 15:16:41.828191-08

文档位于https://docs.djangoproject.com/en/dev/ref/models/fields/#datetimefield

1 个答案:

答案 0 :(得分:0)

最好的现代解决方案是使用 auto_now_add ,如下所示:

date = models.DateTimeField(auto_now_add=True)

但为什么默认方法失败了?调用django.utils.timezone.now()在服务器重启时评估(在常见的服务器设置上)。要获得所需的行为,您可以传递函数本身:

date = models.DateTimeField(default=django.utils.timezone.now)

默认采用值或可调用,如https://docs.djangoproject.com/en/dev/ref/models/fields/#default

中所述