パイソン - ジャンゴ - フィルターと開始日から最初の年にすべての人々を数えます

フィリペ・フォンセカ:

私は契約の初年度にあるすべての人をカウントする必要があります。私もいくつかの試みがなされ、失敗しました。缶誰の助け私?ありがとう!

モデル:

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)
ウィレム・ヴァン・当社:

そこではありませんのでend_date、あなたはその一つをあまりフィルタリングすることはできません。あなたが行うことができますが、単純に設定されているstart_date以上、今に等しいマイナス365日と:

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

今年は、しかし、それ自体は365日ではありません。あなたは例のメイクの使用をすることができますpython-dateutilパッケージ[は、PyPI]で、作業relativedelta[readthedocs.io]

from dateutil.relativedelta import relativedelta

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14705&siteId=1