对于Django 1.1.
我在models.py中有这个:
class User(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)
更新行时,我得到:
[Sun Nov 15 02:18:12 2009] [error] /home/ptarjan/projects/twitter-meme/django/db/backends/mysql/base.py:84: Warning: Column 'created' cannot be null
[Sun Nov 15 02:18:12 2009] [error] return self.cursor.execute(query, args)
Run Code Online (Sandbox Code Playgroud)
我的数据库的相关部分是:
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
Run Code Online (Sandbox Code Playgroud)
这引起关注吗?
附带问题:在我的管理工具中,这两个字段没有显示出来.这是预期的吗?
这个问题现在已经发生了几个星期,而且与我的项目提出的不同.
使用的两个模型具有时间戳字段,默认情况下设置为timezone.now().
这是引发错误标志的序列:
模型一在下午7:30创建
模型二是在晚上10点创建的,但在MySQL数据库中它存储为晚上7:30!
创建的每个模型的时间戳都保存在下午7:30,而不是实际时间,直到某个持续时间过去.然后设置一个新的时间,所有以下模型都有新的时间... Bizzare
一些额外的细节可能有助于发现问题:
我有一堆方法可以剥离我们的时区,tzinfo并用UTC替换它们.
这是因为我正在进行timezone.now() - creationTime计算以创建:"模型在很久以前发布"功能在项目中.但是,这确实不应该是问题的原因.
我认为使用datetime.datetime.now()不会产生任何影响.
无论如何,谢谢你的帮助!
嗨伙伴Djangonauts:
我用django-lint检查了我的项目,它产生了:
W:211,16:MyModel: timestamp: Uses superceded auto_now or auto_now_add
Run Code Online (Sandbox Code Playgroud)
在提交信息:
auto_now/auto_now_add not technically deprecated, but they still suck.
Run Code Online (Sandbox Code Playgroud)
为什么他们说auto_now/auto_now_add"吮吸"?使用这两个字段参数实现创建/上次更新的模式没有问题.
这种模式有更好的方法吗?自定义字段类?为什么(如果这种方法更好)它还没有被集成到Django中?