Как я могу фильтровать две модели одновременно, используя диапазон дат в Django с формами и подсчетом
Я работаю над проектом Django и хочу запросить две разные модели: доходы и расходы, используя диапазон дат с помощью Django Forms. Я могу запросить одну модель одновременно, но не знаю, как я могу запросить обе таблицы доходов и расходов одновременно, а также подсчитать количество объектов в обеих моделях.
Ниже представлены мои модели:
class Expenditure(models.Model):
description = models.CharField(max_length=100, null=False)
source = models.CharField(max_length=100, choices=CATEGORY_EXPENSES, null=True)
staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
amount = models.PositiveIntegerField(null=False)
Remarks = models.CharField(max_length=120, null=True)
date = models.DateField(auto_now_add=False, auto_now=False, null=False)
addedDate = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'Expenses'
def __str__(self):
return self.description
class Income(models.Model):
description = models.CharField(max_length=100, null=False)
staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
amount = models.PositiveIntegerField(null=False)
remarks = models.CharField(max_length=120, null=True)
date = models.DateField(auto_now_add=False, auto_now=False, null=False)
addedDate = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'Income Sources'
def __str__(self):
return self.description
Мои формы Django как в forms.py:
class IncomeSearchForm(forms.ModelForm):
start_date = forms.DateField(required=True, widget = IncomeDateField)
end_date = forms.DateField(required=True, widget = IncomeDateField)
class Meta:
model = Income
fields = ['start_date', 'end_date']
Мой views.py, где я могу использовать Date Range с формой поиска для запроса модели доходов для отчета Date Range.
def SearchIncomeRange(request):
#check for user session
if 'user' not in request.session:
return redirect('cashier-login')
else:
context = {}
searchForm = IncomeSearchForm(request.POST or None)
if searchForm:
listIncome = Income.objects.filter(date__range=[searchForm['start_date'].value(),searchForm['end_date'].value()])
else:
listIncome = Income.objects.all()
paginator = Paginator(listIncome, 5)
page = request.GET.get('page')
paged_listIncome = paginator.get_page(page)
#Calculate total amount of Date Range Result
total = listIncome.aggregate(total =
Sum('amount')).get('total') or 0
context.update({
'listIncome':paged_listIncome,
'searchForm':searchForm,
'total':total,
})
return render(request, 'cashier/search_income_range.html',context)
Прошу кого-нибудь помочь с наилучшим способом фильтрации через мои Модели Доходов и Расходов с их соответствующими Итоговыми показателями и, возможно, подсчетом объектов в обеих моделях. Спасибо.