Django将DateTimeField设置为数据库服务器当前时间
我想知道在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()