В 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()
    )

Результат одинаковый

Вернуться на верх