Как аннотировать возраст человека на основе даты его рождения - Django

Я пытаюсь аннотировать простой объект Person датой рождения пользователя и его возрастом, чтобы сохранить нормализованные данные.

Я хочу позже выполнить некоторую фильтрацию с помощью этой аннотации, поэтому свойство модели не подойдет.

Я нашел эту статью в блоге (последний пример), которая, кажется, утверждает, что то, что я хочу сделать, возможно, однако, когда бы я ни выполнял это age всегда None

Я не знаю, что здесь происходит не так, логически это выглядит разумно...

models.py

class Person(AbstractUser):
    email = models.EmailField(unique=True)
    date_of_birth = models.DateField(default=date.today())

views.py

class PersonViewSet(viewsets.ModelViewSet):
    queryset = Person.objects.all()
    serializer_class = PersonSerializer
    permission_classes = [permissions.IsAdminUser]

    def get_queryset(self):
        queryset = self.queryset.annotate(
            age = ExpressionWrapper(
                ExtractDay(
                    ExpressionWrapper(
                        Value(datetime.now()) - F("date_of_birth"),
                        output_field=DateField(),
                    )
                )
                / 365.25,
                output_field=IntegerField(),
            )
        )
        return queryset
Вернуться на верх