Как рассчитать разницу дат в месяцах
файл models
class Dog(models.Model):
bdate = models.DateField()
файл view
def get_ages(self):
delta = datetime.now().date() -
Dog.objects.values_list("bdate").distinct('bdate')
return delta
В Dog.objects.values_list("bdate").distinct('bdate') лежит quaryset, не могу понять как мне тут время рассчитать.
Используйте annonate
.
qs = qs.annotate(
old_in_days=Value(localtime(), output_field=models.DateField()) - F('bdate')
)
Вычесленное значение будет помещено в old_in_days
переменную
Подробнее в документации
https://docs.djangoproject.com/en/4.0/topics/db/aggregation/
PS: А вообще, если это нужно для фильтра, почему бы не идти от обратного и не фильтровать по датам, который подходят под нужные возраст?
Алгоритм такой:
- Находим самую старую дату
- Узнаем даты начала и конца периода относительно текущей
- Фильтруем по ним (от - до)
Вероятно, этот вариант будет быстрее при больших объемах данных, а может и во всех случаях (или почти)