Изменение значения модели при получении в django
У меня есть модель, которая сохраняет в базе данных дату создания в формате UTC. Когда я хочу показать его пользователю, я хочу, чтобы время даты отображалось в TIME_ZONE, которое я установил в settings.py
(это 'Asia/Jakarta'). Сейчас каждый раз, когда я хочу показать его пользователю, мне приходится вручную изменять его с помощью timezone.localtime()
. Есть ли способ автоматически установить время даты в 'Asia/Jakarta' при получении поля из модели?
Вот моя модель:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
quantity = models.IntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'product'
def __str__(self):
return self.name
Вот мой settings.py
:
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Jakarta'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Результат в оболочке django shell:
>>> from product.models import Product
>>> product = Product.objects.get(pk=1)
>>> product.created_at
datetime.datetime(2021, 11, 29, 13, 48, 9, 953290, tzinfo=<UTC>)
>>> from django.utils import timezone
>>> timezone.localtime(product.created_at)
datetime.datetime(2021, 11, 29, 20, 48, 9, 953290, tzinfo=<DstTzInfo 'Asia/Jakarta' WIB+7:00:00 STD>) <-- Expected result
Есть ли у вас USE_TZ
в файле settings.py?
Если у вас нет, добавьте это в файл settings.py:
USE_TZ = True