我有一个具有日期时间字段的模型:
date = models.DateField(_("Date"), default=datetime.now())
当我在内置的django admin中检查应用程序时,DateField也会附加时间,因此如果您尝试保存它,则会返回错误。如何将默认设置为日期? (datetime.today()也不起作用)
答案 0 :(得分:125)
这就是为什么你应该始终导入基础datetime
模块:import datetime
,而不是该模块中的datetime
类:from datetime import datetime
。
您犯的另一个错误是使用()
实际调用默认函数。这意味着所有模型将在首次定义类时获得的日期< - em> - 因此,如果您的服务器在没有重新启动Apache的情况下保持数天或数周,则所有元素将与初始日期相同。
所以这个领域应该是:
import datetime
date = models.DateField(_("Date"), default=datetime.date.today)
答案 1 :(得分:28)
您错误的是使用日期时间模块而不是日期模块。你打算这样做:
from datetime import date
date = models.DateField(_("Date"), default=date.today)
如果您只想捕获当前日期,处理此问题的正确方法是使用auto_now_add参数:
date = models.DateField(_("Date"), auto_now_add=True)
但是,modelfield docs明确指出auto_now_add和auto_now将总是使用当前日期,而不是您可以覆盖的默认值。
答案 2 :(得分:7)
date = models.DateTimeField(default=datetime.now, blank=True)
答案 3 :(得分:3)
这应该可以解决问题:
models.DateTimeField(_("Date"), auto_now_add = True)
答案 4 :(得分:1)
您也可以使用lambda
。如果您使用的是django.utils.timezone.now
date = models.DateField(_("Date"), default=lambda: now().date())
答案 5 :(得分:0)
我认为解决此问题的更好方法是使用可调用的datetime:
from datetime import datetime
date = models.DateField(default=datetime.now)
请注意,未使用括号。如果使用括号,则只需调用一次now()
函数(创建模型时)。相反,您将callable作为参数传递,因此每次创建模型实例时都会被调用。
贷记到Django Musings。我已经用过并且工作正常。