如何在Django Models中为TimeField()设置当前时间作为默认值?
Django中为TimeField设置当前时间默认值的方法
先看Django官方文档对DateField.auto_now_add的相关说明:
当对象首次创建时,自动将字段设置为当前时间。……如果您希望能够修改此字段,请使用以下设置替代
auto_now_add=True:
- 对于
DateField:default=date.today- 来自datetime.date.today()- 对于
DateTimeField:default=timezone.now- 来自django.utils.timezone.now()
按照文档指引,我们可以这样为DateField和DateTimeField设置可修改的当前日期/时间默认值:
from datetime import date from django.utils import timezone class MyModel(models.Model): date = models.DateField(default=date.today) # 默认当前日期 datetime = models.DateTimeField(default=timezone.now) # 默认当前完整时间
那么问题来了:如何为TimeField设置当前时间作为可修改的默认值?也就是补全以下代码中的default参数:
class MyModel(models.Model): time = models.TimeField(default=...)
正确实现方式
推荐使用Django的时区工具适配项目时区配置,同时要注意不能直接调用方法(否则只会在模型加载时执行一次,后续创建对象都会复用同一个时间),需要用lambda表达式包裹,确保每次创建实例时都获取最新的当前时间:
from django.utils import timezone class MyModel(models.Model): time = models.TimeField(default=lambda: timezone.now().time())
如果项目不需要考虑时区问题,也可以使用Python标准库的方法:
from datetime import datetime class MyModel(models.Model): time = models.TimeField(default=lambda: datetime.now().time())
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

