Как рассчитать разницу дат в месяцах

файл 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: А вообще, если это нужно для фильтра, почему бы не идти от обратного и не фильтровать по датам, который подходят под нужные возраст?

Алгоритм такой:

  1. Находим самую старую дату
  2. Узнаем даты начала и конца периода относительно текущей
  3. Фильтруем по ним (от - до)

Вероятно, этот вариант будет быстрее при больших объемах данных, а может и во всех случаях (или почти)

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