Django将DateTimeField设置为数据库服务器当前时间

61 投票
10 回答
94417 浏览
提问于 2025-04-17 02:33

我想知道在Django中怎么做和这个SQL一样的事情。

UPDATE table SET timestamp=NOW() WHERE ...

特别是,我想用服务器自带的功能来设置日期时间字段,这样就能获取数据库所在服务器的系统时间,而不是客户端机器上的时间。

我知道可以直接执行原始SQL,但我想要一个更通用的解决方案,因为不同的数据库获取当前日期时间的函数不一样。

补充一下:有些人提到过auto_now参数。这个参数会在每次修改时更新日期时间,而我只想在特定情况下更新日期时间。

10 个回答

33

从Django 1.9开始,你可以使用数据库功能Now

from django.db.models.functions import Now
Model.objects.filter(...).update(timestamp=Now())
55

这个被接受的答案有点过时了。这里有一种现在最简单的方法来实现这个:

>>> from django.utils import timezone
>>> timezone.now()
datetime.datetime(2018, 12, 3, 14, 57, 11, 703055, tzinfo=<UTC>)
71

正如j0ker所说,如果你想让时间戳自动更新,可以使用auto_now这个选项。例如,date_modified = models.DateTimeField(auto_now=True)

如果你只想在对象第一次创建时设置这个字段为当前时间,你应该使用:

date_modified = models.DateTimeField(auto_now_add=True)

或者,如果你想手动设置时间,不就是用Python的datetime.now()来简单赋值吗?

from datetime import datetime

obj.date_modified = datetime.now()

撰写回答