如何在Django Models中将当前时间设置为“TimeField()”作为默认值?

8hhllhi2  于 2023-06-07  发布在  Go
关注(0)|答案(2)|浏览(415)

该文档在DateField.auto_now_add中写道:
首次创建对象时自动将字段设置为“现在”。...如果您希望能够修改此字段,请设置以下内容而不是auto_now_add=True

  • 对于DateFielddefault=date.today - from datetime.date.today()
  • 对于DateTimeFielddefault=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=...)
bvjveswy

bvjveswy1#

你可以使用一个 callable

from django.utils import timezone

def current_time():
    return timezone.now().time()

class MyModel(models.Model):
    time = models.TimeField(default=current_time)

每次你定义一个新的MyModel,而时间没有过去,它将 * 调用 * current_time方法,从而返回当前的时间分量(时间分区的时间)。
使用括号 not 很重要,所以default=current_timenotdefault=current_time()

xfyts7mz

xfyts7mz2#

您可以在不使用()的情况下设置current_time,它将timezone.now().time()作为默认值返回给TimeField(),如下所示。* 不要将current_time()设置为(),因为默认时间是Django服务器启动时(未更改):

from django.utils import timezone

def current_time(): # Here
    return timezone.now().time()

class MyModel(models.Model): # Don't set "current_time()"
    time = models.TimeField(default=current_time)

请注意,不要将timezone.now().time()()设置为TimeField()作为默认值,如下所示,因为默认时间将变为Django服务器启动时(未更改):

from django.utils import timezone

class MyModel(models.Model): # Don't set "timezone.now().time()"
    time = models.TimeField(default=timezone.now().time())

并且,不要将没有()timezone.now().time设置为TimeField()作为默认值,如下所示,因为在运行python manage.py makemigrations时会出现错误:

from django.utils import timezone

class MyModel(models.Model): # Don't set "timezone.now().time"
    time = models.TimeField(default=timezone.now().time)

此外,我不建议使用DateField()和TimeField(),因为它们不能与settings.py中的TIME_ZONE一起工作,正如我问the question的那样,而DateTimeField()可以。

相关问题