我正在修复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
答案 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
中所述