Как отобразить месяц и месячный итог, используя атрибуты в классе фильтра django и вызывая представление на основе класса?

в моем models.py, у меня есть это, (важно: дата, сумма)

class Expenditure(models.Model):
    item = models.ForeignKey(Item, on_delete=models.SET_NULL, null=True, related_name='items')
    author = models.ForeignKey('auth.User', on_delete=models.DO_NOTHING, null=True)
    bank = models.ForeignKey(Bank, on_delete=models.DO_NOTHING, blank=True, null=True)
    date = models.DateField(blank=False, null=False, default=datetime.date.today)
    amount = models.DecimalField(max_digits=20, decimal_places=2, validators=[MinValueValidator(Decimal('0.01'))])
    remarks = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        template = '{0.item}, {0.date}'
        return template.format(self)

    def get_absolute_url(self):
        return reverse('expenditure_detail',kwargs={'pk':self.pk})

в моем filters.py у меня есть следующее (важно: год, месяц)

MONTH_CHOICES = [
    ('1','January'),('2','February'),('3','March'),('4','April'),('5','May'),('6','June'),
    ('7','July'),('8','August'),('9','September'),('10','October'),('11','November'),('12','December'),
]

YEAR_CHOICES = [
    ('2021','2021'),('2022','2022'),('2023','2023'),('2024','2024'),('2025','2025'),
]


class ExpenditureFilter(django_filters.FilterSet):
    month = django_filters.ChoiceFilter(field_name='date',label='Month',choices=MONTH_CHOICES,widget=forms.Select(attrs={'class':'form-control'}),lookup_expr='month')
    year = django_filters.ChoiceFilter(field_name='date',label='Year',choices=YEAR_CHOICES,widget=forms.Select(attrs={'class':'form-control'}),lookup_expr='year')

    class Meta:
        model = Expenditure
        fields = ('year','month')

в моем views.py у меня есть следующее (важно: установка класса ExpenditureFilter и контекста)

class ExpenditureListView(LoginRequiredMixin, ListView):
    context_object_name = 'expenditures'
    login_url = 'login/'
    model = Expenditure
    # paginate_by = 10
    ordering = ["-date"]
    today = datetime.date.today()

    def get_queryset(self):
        queryset = super().get_queryset()
        filter = ExpenditureFilter(self.request.GET, queryset)
        return filter.qs

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        queryset = self.get_queryset()

        filter = ExpenditureFilter(self.request.GET, queryset)

        context["filter"] = filter
        context['total'] = float(Expenditure.objects.aggregate(Sum('amount')).get('amount__sum', 0.00))
        context['current_month_total'] = float(Expenditure.objects.filter(date__year=self.today.year, date__month=self.today.month).aggregate(Sum('amount')).get('amount__sum', 0.00))

        return context

в моем HTML шаблоне, у меня есть это, (важно: форма фильтра, контекст)

Я не могу понять, как я могу отобразить мой месячный итог при изменении фильтра 'года' и фильтра 'месяца' (я могу отобразить текущий месячный итог, проверьте изображение)

ссылка на изображение

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