Как я могу фильтровать две модели одновременно, используя диапазон дат в 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)

Прошу кого-нибудь помочь с наилучшим способом фильтрации через мои Модели Доходов и Расходов с их соответствующими Итоговыми показателями и, возможно, подсчетом объектов в обеих моделях. Спасибо.

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