python 如何在Django模型中通过TIME_ZONE将当前正确的日期和时间分别设置为“DateField()”和“TimeField()”作为默认值?

wbrvyc0a  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(203)

下面的文档在DateField.auto_now_add中说。* 我使用Django 4.2.1
首次创建对象时自动将字段设置为“现在”。...如果您希望能够修改此字段,请设置以下内容而不是auto_now_add=True

  • 对于DateFielddefault=date.today - from datetime.date.today()
  • 对于DateTimeFielddefault=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分别设置为date2DateField()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

但是,date1DateField()timeTimeField()在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

但是,date2DateField()timeTimeField()在Django Admin上显示UTC(+0小时)的日期和时间,如下所示:

那么,我如何在Django Models中通过TIME_ZONE将当前正确的日期和时间分别设置为DateField()TimeField()作为默认值?
此外,具有auto_now或auto_now_add的DateField()TimeField()无法使用任何TIME_ZONE设置分别保存UTC(+0小时)的日期和时间。

knpiaxh1

knpiaxh11#

问题是您将USE_TZ设置为True
如果USE_TZ被设置为True,不管你的TIME_ZONE变量被设置为什么,Django都只会使用UTC。

相关问题