提问人:Super Kai - Kazuya Ito 提问时间:5/28/2023 最后编辑:Super Kai - Kazuya Ito 更新时间:6/2/2023 访问量:350
如何在 Django 模型中将当前时间设置为“TimeField()”作为默认值?
How to set the current time to "TimeField()" as a default value in Django Models?
问:
文档在下面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=...)
答:
您可以将 time zone.now().time() 设置为默认值,如下所示。*不要设置 with,因为默认时间是 Django 服务器启动时(不变):current_time
()
current_time()
()
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)
请注意,不要将 to 设置为默认值,如下所示,因为默认时间是 Django 服务器启动时(不变):timezone.now().time()
()
TimeField()
from django.utils import timezone
class MyModel(models.Model): # Don't set "timezone.now().time()"
time = models.TimeField(default=timezone.now().time())
而且,不要将 without to 设置为默认值,如下所示,因为运行时会出现错误: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(),因为它们不能像我问的那样与 TIME_ZONE 一起使用,而 DateTimeField() 可以。TimeField()
settings.py
您可以使用可调用对象:
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
重要的是不要使用括号,所以 ,而不是 default=current_time()。
default=current_time
评论