Как отобразить месяц и месячный итог, используя атрибуты в классе фильтра 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 шаблоне, у меня есть это, (важно: форма фильтра, контекст)
Я не могу понять, как я могу отобразить мой месячный итог при изменении фильтра 'года' и фильтра 'месяца' (я могу отобразить текущий месячный итог, проверьте изображение)