以上是我在管理界面中的一个表格,按id
的降序排列(最近的记录位于顶部)。这是我用来创建模型对象和保存的方式。
notification = Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now())
notification.save()
此表Notification
的所有插入仅在各种post_save
信号处理程序中完成。它会导致这些不一致吗?
在django 1.3.2中使用TIME_ZONE = 'GMT'
。我可以尝试使用模型中的auto_now_add=True
选项,但在此之前只想知道为什么会发生这种情况。
答案 0 :(得分:4)
auto_now_add
不是一个好方法。避免使用它。最好的方法是使用set default value:
from django.utils import timezone
date_created = models.DateTimeField(default=timezone.now)
django.utils.timezone
将根据您的时区设置存储日期时间。
注意()
之后缺少的timezone.now
,因为我们将可调用的函数传递给模型,并且每次保存新实例时都会调用它。使用括号,只有在models.py
加载时才会调用一次。这个question更详细地澄清了这个问题。
答案 1 :(得分:2)
在定义模型时,不应初始化datetime.now()。这导致某种“缓存”#34; datetime.now。
而不是:
Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now())
您应该使用:
Notification(from_user=from_user, to_user=to_user,
created_date=datetime.now)
答案 2 :(得分:1)
我认为这是由于Pythons运行时环境进程的方式,希望有人可以重新进行迭代。 auto_add_now = True应该是您建议的解决方案。