В Django 3.2 неправильно работает функция now()
Для приложения авторизации в проекте Джанго вычисляю в модели юзера срок истечения действия созданной для него временной ссылки, которая направляется на использованный при регистрации имейл:
models.py
from django.contrib.auth.models import AbstractUser
from django.utils import timezone
class AuthUser(AbstractUser):
...
activation_key_expires = models.DateTimeField(
default=timezone.localtime(timezone.now()) + USER_EXPIRES_TIMEDELTA
)
По непонятной мне причине значение атрибута пользователя activation_key_expires оказывается равным не времени создания пользователя, а времени, когда последний раз выполнялся рестарт сервиса gunicorn3.service, который на проде обслуживает приложение. Звучит как-то безумно. Но так и есть. Как это можно объяснить и как исправить такое поведение?
Первоначальная реализация была с помощью отдельной функции: models.py
from django.contrib.auth.models import AbstractUser
from django.utils import timezone
def get_activation_key_expires():
return timezone.localtime(timezone.now()) + USER_EXPIRES_TIMEDELTA
class AuthUser(AbstractUser):
...
activation_key_expires = models.DateTimeField(
default=get_activation_key_expires()
)
Результат одинаковый