Вычисление возраста по дате рождения с помощью запроса 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 на имя вашего приложения, в котором вы написали свою модель.