这个问题已经断断续续地发生了几个星期了,它不像我的项目中出现的任何问题。
使用的两个模型都有一个timestamp字段,默认设置为timezone.now()
。
这是引发错误标志的序列:
- 模型一在下午7:30创建
- 模型二是在晚上10:00创建的,但在MySQL数据库中,它被存储为晚上7:30!
创建的每个模型都将其时间戳保存在7:30 PM以下,而不是实际时间,直到某个持续时间过去。然后设置一个新的时间,并且所有以下模型都具有该新时间...比扎雷
一些额外的细节可能有助于发现问题:
我有一堆方法,我用来剥离我的时区的tzinfo
的,并取代他们与UTC。
这是因为我正在执行timezone.now() - creationTime
计算以创建:项目中的“模型很久以前就发布了”功能。然而,这真的不应该是问题的原因。
我认为使用datetime.datetime.now()
也不会有什么不同。
不管怎样,谢谢你的帮助!
3条答案
按热度按时间n7taea2i1#
上周刚刚遇到了一个有
default=date.today()
的字段。如果去掉括号(在本例中,尝试default=timezone.now
),那么就向模型传递了一个可调用对象,并且每次保存新示例时都会调用它。使用圆括号,它只在models.py
加载时被调用一次。5t7ly7z52#
只需要像这样设置参数
auto_now_add
。更新:
请不要使用
auto_now_add
。这不是推荐的方法,而是这样做:0mkxixxg3#
您应该将timezone.now不带
()
的www.example.com设置为DateTimeField()作为默认值,如下所示。* 不要设置timezone.now()
和()
,因为默认的日期和时间是Django服务器启动时(未更改),不要设置datetime.now,因为当TIME_ZONE = 'UTC'时,UTC没有正确保存在数据库中,这是settings.py
的默认值: