Как аннотировать возраст человека на основе даты его рождения - 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