下面的文档在DateField.auto_now_add中说。* 我使用Django 4.2.1:
首次创建对象时自动将字段设置为“现在”。...如果您希望能够修改此字段,请设置以下内容而不是auto_now_add=True
:
- 对于
DateField
:default=date.today
-from datetime.date.today()
- 对于
DateTimeField
:default=timezone.now
-from django.utils.timezone.now()
因此,我将timezone.now和date.today分别设置为datetime
的DateTimeField()和date1
的DateField(),还将返回timezone.now().date()
的current_date
和返回timezone.now().time()
的current_time
分别设置为date2
的DateField()
和time
的TimeField(),如下所示:
# "models.py"
from django.db import models
from datetime import date
from django.utils import timezone
def current_date():
return timezone.now().date()
def current_time():
return timezone.now().time()
class MyModel(models.Model):
datetime = models.DateTimeField(default=timezone.now) # Here
date1 = models.DateField(default=date.today) # Here
date2 = models.DateField(default=current_date) # Here
time = models.TimeField(default=current_time) # Here
然后,我将'America/New_York'
设置为settings.py
中的TIME_ZONE,如下所示:
# "settings.py"
LANGUAGE_CODE = "en-us"
TIME_ZONE = 'America/New_York' # Here
USE_I18N = True
USE_L10N = True
USE_TZ = True
但是,date1
的DateField()
和time
的TimeField()
在Django Admin上分别显示UTC(+0小时)的日期和时间,如下所示:
接下来,我在settings.py
中设置'Asia/Tokyo'
到TIME_ZONE
,如下所示:
# "settings.py"
LANGUAGE_CODE = "en-us"
TIME_ZONE = 'Asia/Tokyo' # Here
USE_I18N = True
USE_L10N = True
USE_TZ = True
但是,date2
的DateField()
和time
的TimeField()
在Django Admin上显示UTC(+0小时)的日期和时间,如下所示:
那么,我如何在Django Models中通过TIME_ZONE
将当前正确的日期和时间分别设置为DateField()
和TimeField()
作为默认值?
此外,具有auto_now或auto_now_add的DateField()
和TimeField()
无法使用任何TIME_ZONE
设置分别保存UTC(+0小时)的日期和时间。
1条答案
按热度按时间knpiaxh11#
问题是您将
USE_TZ
设置为True
。如果
USE_TZ
被设置为True
,不管你的TIME_ZONE
变量被设置为什么,Django都只会使用UTC。