You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:27:06