Django“default= timezone.now()”使用Django服务器启动时的“旧”时间保存记录

wn9m85ua  于 2023-06-07  发布在  Go
关注(0)|答案(3)|浏览(663)

这个问题已经断断续续地发生了几个星期了,它不像我的项目中出现的任何问题。
使用的两个模型都有一个timestamp字段,默认设置为timezone.now()
这是引发错误标志的序列:

  • 模型一在下午7:30创建
  • 模型二是在晚上10:00创建的,但在MySQL数据库中,它被存储为晚上7:30!

创建的每个模型都将其时间戳保存在7:30 PM以下,而不是实际时间,直到某个持续时间过去。然后设置一个新的时间,并且所有以下模型都具有该新时间...比扎雷
一些额外的细节可能有助于发现问题:
我有一堆方法,我用来剥离我的时区的tzinfo的,并取代他们与UTC。
这是因为我正在执行timezone.now() - creationTime计算以创建:项目中的“模型很久以前就发布了”功能。然而,这真的不应该是问题的原因。
我认为使用datetime.datetime.now()也不会有什么不同。
不管怎样,谢谢你的帮助!

n7taea2i

n7taea2i1#

上周刚刚遇到了一个有default=date.today()的字段。如果去掉括号(在本例中,尝试default=timezone.now),那么就向模型传递了一个可调用对象,并且每次保存新示例时都会调用它。使用圆括号,它只在models.py加载时被调用一次。

5t7ly7z5

5t7ly7z52#

只需要像这样设置参数auto_now_add

timestamp = models.DateTimeField(auto_now_add=True)

更新:
请不要使用auto_now_add。这不是推荐的方法,而是这样做:

from django.utils import timezone

timestamp = models.DateTimeField(default=timezone.now)
0mkxixxg

0mkxixxg3#

您应该将timezone.now不带()的www.example.com设置为DateTimeField()作为默认值,如下所示。* 不要设置timezone.now()(),因为默认的日期和时间是Django服务器启动时(未更改),不要设置datetime.now,因为当TIME_ZONE = 'UTC'时,UTC没有正确保存在数据库中,这是settings.py的默认值:

from django.utils import timezone
# Don't set "timezone.now()" and "datetime.now" ↓ 
timestamp = models.DateTimeField(default=timezone.now)

相关问题