Django DateField 默认选项

104 投票
8 回答
218107 浏览
提问于 2025-04-15 17:48

我有一个模型里面有一个日期时间字段:

date = models.DateField(_("Date"), default=datetime.now())

当我在内置的Django管理后台查看这个应用时,DateField字段也显示了时间,这样如果我尝试保存,就会出现错误。请问我该怎么做才能让默认值只显示日期呢?(datetime.today()也不管用)

8 个回答

7

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,当我们在使用某个工具或者库的时候,可能会发现它的某些功能不太好用,或者出现了错误。这时候,我们可以去一些技术论坛,比如StackOverflow,去询问其他开发者的意见和建议。

在这些论坛上,大家会分享自己的经验,提出问题,或者给出解决方案。你可以看到很多人讨论同一个问题,提供不同的看法和方法。这种交流可以帮助我们更快地找到解决问题的办法,也能让我们学到更多的知识。

总之,技术论坛是一个很好的资源,特别是对于刚开始学习编程的人来说,能够从中获得很多实用的信息和帮助。

date = models.DateTimeField(default=datetime.now, blank=True)
172

这就是为什么你应该始终导入基础的 datetime 模块:import datetime,而不是直接导入这个模块里的 datetime 类:from datetime import datetime

你犯的另一个错误是,在默认情况下直接调用了这个函数,用了 ()。这意味着所有模型在类第一次定义的时候就会获取到那个时间的日期——所以如果你的服务器连续运行几天或几周而没有重启Apache,所有元素都会得到同一个最初的日期。

所以这个字段应该是:

import datetime
date = models.DateField(_("Date"), default=datetime.date.today)
53

你的错误在于使用了 datetime 类,而不是 date 类。你应该这样做:

from datetime import date
date = models.DateField(_("Date"), default=date.today)

如果你只是想获取当前日期,正确的方法是使用 auto_now_add 参数:

date = models.DateField(_("Date"), auto_now_add=True)

不过,modelfield 文档明确说明 auto_now_addauto_now始终 使用当前日期,而不是可以被你覆盖的默认值。

撰写回答