该文档在DateField.auto_now_add中写道:
首次创建对象时自动将字段设置为“现在”。...如果您希望能够修改此字段,请设置以下内容而不是auto_now_add=True
:
- 对于
DateField
:default=date.today
-from datetime.date.today()
- 对于
DateTimeField
:default=timezone.now
-from django.utils.timezone.now()
所以对于DateField()和DateTimeField(),我可以将当前日期和时间分别设置为默认值,如下所示:
from datetime import date
from django.utils import timezone
class MyModel(models.Model):
date = models.DateField(default=date.today) # Here
datetime = models.DateTimeField(default=timezone.now) # Here
现在,如何将当前时间设置为TimeField()作为默认值,如下所示?
class MyModel(models.Model): # ?
time = models.TimeField(default=...)
2条答案
按热度按时间bvjveswy1#
你可以使用一个 callable:
每次你定义一个新的
MyModel
,而时间没有过去,它将 * 调用 *current_time
方法,从而返回当前的时间分量(时间分区的时间)。使用括号 not 很重要,所以
default=current_time
,notdefault=current_time()
。xfyts7mz2#
您可以在不使用
()
的情况下设置current_time
,它将timezone.now().time()作为默认值返回给TimeField(),如下所示。* 不要将current_time()
设置为()
,因为默认时间是Django服务器启动时(未更改):请注意,不要将
timezone.now().time()
与()
设置为TimeField()
作为默认值,如下所示,因为默认时间将变为Django服务器启动时(未更改):并且,不要将没有
()
的timezone.now().time
设置为TimeField()
作为默认值,如下所示,因为在运行python manage.py makemigrations
时会出现错误:此外,我不建议使用DateField()和
TimeField()
,因为它们不能与settings.py
中的TIME_ZONE一起工作,正如我问the question的那样,而DateTimeField()可以。