Python - Django - Отфильтровать и подсчитать всех людей в первый год с даты начала - PullRequest
2 голосов
/ 25 февраля 2020

Мне нужно подсчитать всех людей, которые находятся на первом году контракта. Я даже сделал несколько попыток и потерпел неудачу. Может кто-нибудь мне помочь? Спасибо!

Модель:

class Contracts(models.Model):
    person = models.CharField(max_length=50, null=True, blank=True, verbose_name='Name')
    start_date = models.DateField(null=True, blank=False, verbose_name='Start')

    def __str__(self):
        return '{}'.format(self.person)

Пока ...

Вид:

def people_in_first_year(request):
    people = Contracts.objects.filter(Q(start_date__lte=timezone.now()) & Q(end_date__gte=timezone.now() + timedelta(days=365)))
    total_people = people.count()

    context = {
        'total_people': total_people,
    }

    return render(request, 'people.html', context)

1 Ответ

2 голосов
/ 25 февраля 2020

Так как end_date нет, вы не можете много фильтровать по этому. Что вы можете сделать, это просто установить значение start_date больше или равно текущему минус 365 дней:

total_people = Contracts.objects.filter(
    <b>start_date__gte=timezone.now() - timedelta(days=365)</b>
).count()

Год, однако, сам по себе не равен 365 дням. Например, вы можете использовать пакет python-dateutil [pypi] и работать с relativedelta [readthedocs.io] :

from dateutil.relativedelta import relativedelta

total_people = Contracts.objects.filter(
    start_date__gte=timezone.now() - <b>relativedelta(years=1)</b>
).count()
...