我有一个具有日期时间字段的模型:
date = models.DateField(_("Date"), default=datetime.now())
当我在内置的django admin中检查该应用程序时,DateField
还会附加时间,因此,如果您尝试保存它,则会返回错误。如何将默认日期设为默认值?(datetime.today()
也不起作用)
Answers:
这就是为什么您应该始终导入基本datetime
模块:import datetime
而不是该datetime
模块中的类的原因from datetime import datetime
。
您犯的另一个错误是使用实际调用默认的函数()
。这意味着所有模型都将在首次定义类时获得日期-因此,如果您的服务器在不重启Apache的情况下工作了几天或几周,则所有元素的初始日期都将相同。
因此,该字段应为:
import datetime
date = models.DateField(_("Date"), default=datetime.date.today)
_("Date")
做什么
您的错误是使用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_add
并且auto_now
将始终使用当前日期和不属于默认值,你可以重写。
date = models.DateTimeField(default=datetime.now, blank=True)
您也可以使用lambda
。如果您正在使用django.utils.timezone.now,此功能非常有用
date = models.DateField(_("Date"), default=lambda: now().date())
Note that lambdas cannot be used for field options like default because they cannot be serialized by migrations. See that documentation for other caveats.