Django DateField默认选项

时间:2010-01-08 17:18:42

标签: python django django-models

我有一个具有日期时间字段的模型:

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

当我在内置的django admin中检查应用程序时,DateField也会附加时间,因此如果您尝试保存它,则会返回错误。如何将默认设置为日期? (datetime.today()也不起作用)

6 个答案:

答案 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。我已经用过并且工作正常。