Django DateField默认选项

dam*_*mon 71 python django django-models

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

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

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

Dan*_*man 134

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

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

所以该领域应该是:

import datetime
date = models.DateField(_("Date"), default=datetime.date.today)
Run Code Online (Sandbox Code Playgroud)

  • 什么是`_("日期")`做什么? (13认同)
  • @benregn它给该字段标注"日期",但标记为使用国际化系统进行翻译. (6认同)

Eri*_*arr 31

你错了是使用datetime模块而不是date模块.你打算这样做:

from datetime import date
date = models.DateField(_("Date"), default=date.today)
Run Code Online (Sandbox Code Playgroud)

如果您只想捕获当前日期,处理此问题的正确方法是使用auto_now_add参数:

date = models.DateField(_("Date"), auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

但是,modelfield文档明确指出auto_now_add和auto_now将始终使用当前日期,并且不是您可以覆盖的默认值.


小智 8

date = models.DateTimeField(default=datetime.now, blank=True)
Run Code Online (Sandbox Code Playgroud)

  • DateTimeField不一样.如果您将日期时间作为默认日期时间提供给DateField,那么您将遇到麻烦. (3认同)

ppi*_*com 6

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

from datetime import datetime

date = models.DateField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)

请注意,没有使用括号。如果您使用括号,您将只调用now()一次该函数(在创建模型时)。相反,您将 callable 作为参数传递,从而在每次创建模型实例时调用。

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


btk*_*btk 5

这应该可以解决问题:

models.DateTimeField(_("Date"), auto_now_add = True)
Run Code Online (Sandbox Code Playgroud)