Django的DateField默认选项

我有一个模型,它有一个date时间字段:

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

当我检查内置的Djangopipe理中的应用程序,DateField也有时间追加到它,所以,如果你试图保存它会返回一个错误。 我如何使默认的date? (datetime.today()不工作)

这就是为什么你应该总是导入基本的datetime模块: import datetime ,而不是在该模块内的datetime类: from datetime import datetime

你所犯的另一个错误是用()函数实际调用默认的函数。 这意味着所有的模型都会在类定义的时候得到date – 所以如果你的服务器在不重启Apache的情况下保持好几天或者几周,所有的元素都会和初始date一样。

所以这个领域应该是:

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

你错误的是使用date时间模块,而不是date模块。 你打算这样做:

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

如果您只想捕获当前date,则正确的方法是使用auto_now_add参数:

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

但是, modelfield文档明确指出,auto_now_add和auto_now将始终使用当前date,而不是您可以覆盖的默认值。

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

这应该做的伎俩:

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

你也可以使用lambda 。 如果你使用的是django.utils.timezone.now,那么这很有用

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