在我的每个模型上,我喜欢跟踪创建和修改的时间。我总是把这个添加到我的模型类中:
class SomeModel(models.Model):
...
creation_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
酷。简单的对吧?是的。或者你也可以这样做:
from django_extensions.db.models import TimeStampedModel
class SomeModel(TimeStampedModel):
...
今天,有史以来第一次,当我在开发服务器上运行项目和在运行服务器上运行项目时,我看到了奇怪的行为。
注意:值得注意的是,下面的行为发生在我的手动模型creation_date/modified_date设置以及如果我使用来自django_extensions的TimeStampedModel。
在我的开发服务器上,它按预期工作:
添加新的模型实例
- 自动更新creation_date
- 自动更新modified_date
更新模型实例
- creation_date保持原始(预期行为)不变
- 自动更新modified_date
添加新的模型实例
- 自动更新creation_date
- 自动更新modified_date
更新模型实例
- creation_date被设置为0000-00-00 00:00:00.000000 (意外行为)
- 自动更新modified_date
开发服务器:
- Django 1.8 Python 2.7.9
生活服务器:
- Django 1.8 Python 2.7.9
正如你所看到的,它们之间的唯一区别是对MySQL的轻微修改。这应该不是问题,但是,我在这里…出现这种奇怪的行为。什么好主意吗?
在5.6.25中修复了一个日期时间错误(参见http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-25.html#mysqld-5-6-25-bug) -尝试更新您的实时系统