Изменение значения модели при получении в 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
Вернуться на верх