Вычисление возраста по дате рождения с помощью запроса django orm

Я рассчитываю возраст с помощью кода python, например

age = datetime.date.today().year - patient_table.dob.year - ((datetime.date.today().month, datetime.date.today().day) < (patient_table.dob.month, patient_table.dob.day))

я возвращаю правильный возраст. но мне нужен этот результат, используя Django orm query, как я могу это сделать?

я пробовал,

PatientTable.objects.filter(is_active=True,is_deleted=False).annotate(age=datetime.date.today().year - F('dob__year'))

но возраст становится неправильным.

Для этого необходимо использовать RawSQL

from django.db.models.expressions import RawSQL

raw = 'Select DATEDIFF(CURDATE(), `yourappname_patienttable`.`dob`) from `yourappname_patienttable` u where u.`id`=`yourappname_patienttable`.id'

queryset = PatientTable.objects.all().annotate(age=RawSQL(raw, ()))

for obj in queryset:
    print(obj.age)

Это даст вам количество дней с даты рождения. Обязательно замените yourappname в raw sql на имя вашего приложения, в котором вы написали свою модель.

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