Django DateField默认选项


80

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

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

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

Answers:


149

这就是为什么您应该始终导入基本datetime模块:import datetime而不是该datetime模块中的类的原因from datetime import datetime

您犯的另一个错误是使用实际调用默认的函数()。这意味着所有模型都将在首次定义类时获得日期-因此,如果您的服务器在不重启Apache的情况下工作了几天或几周,则所有元素的初始日期都将相同。

因此,该字段应为:

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

有没有办法添加时间增量?例如:default = datetime.date.today + datetime.timedelta(days = 4)...此代码不起作用,但这就是想法。(当然,保存方法是执行此操作的地方,但是只是想知道是否有一种方法可以将其作为定义的一部分)
Joe J

1
@乔J:这确实应该是一个新问题。但是,您可以使用可调用函数这一事实意味着您可以定义自己的函数,该函数返回Today + 4。
Daniel Roseman

21
_("Date")做什么
benregn 2011年

10
@benregn为该字段提供“日期”标签,但将其标记为使用国际化系统进行翻译。
丹尼尔·罗斯曼

感谢您澄清这一点,我才刚刚开始Django开发,对我来说还不清楚它是否在做更多的工作。
benregn 2011年

38

您的错误是使用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始终使用当前日期和不属于默认值,你可以重写。


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

5
DateTimeField不一样。如果您将datetime作为默认值提供给DateField,则会遇到麻烦。
onekiloparsec

5

我认为解决此问题的更好方法是使用datetime可调用:

from datetime import datetime

date = models.DateField(default=datetime.now)

请注意,没有使用括号。如果使用括号,则now()只需调用一次函数(创建模型时)。相反,您将callable作为参数传递,因此每次创建模型实例时都会被调用。

感谢Django的沉思。我已经用过并且工作正常。


4

这应该可以解决问题:

models.DateTimeField(_("Date"), auto_now_add = True)

1
我的朋友,我认为您读错了。问题是有关DateField而不是有关DateTimeField。
xxbinxx

2

您也可以使用lambda。如果您正在使用django.utils.timezone.now,此功能非常有用

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

6
查看文档。使用lambda作为默认的可调用包装是不好的:Note that lambdas cannot be used for field options like default because they cannot be serialized by migrations. See that documentation for other caveats.
pulina 2015年

@pulina是正确的,但是在这种情况下,当您需要将日期绑定到配置的时区时,这似乎是唯一的解决方案
oxfn

不。您可以在代码中指向实际函数。与此相关的任何函数或方法参考都是模型顶级函数。
pulina
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.