Расчет доходов и расходов путем фильтрации по введенной дате

У меня есть выборка даты, и я буду рассчитывать доходы и расходы на основе этой даты. Я хочу добавить параметр с именем random_date к моей функции в view.py. Я хочу, чтобы пользователь задавал конечную дату. Начальной датой будет сегодняшняя дата. Например, если пользователь выбрал 1 июня в качестве даты, я хочу суммировать доходы и расходы с сегодняшнего дня по 1 июня. Как я могу это сделать?

Вот мой файл views.py:

import datetime
from django.shortcuts import render
from incomes.models import Income, Source
from expenses.models import Expense, Category
from .models import SummaryModel


# Create your views here.
def Summary(request):
    todays_date = datetime.date.today()
    six_months_later = todays_date + datetime.timedelta(days=180)
    all_expenses = Expense.objects.filter(owner=request.user, date__gte=todays_date, date__lte=six_months_later)
    all_incomes = Income.objects.filter(owner=request.user, date__gte=todays_date, date__lte=six_months_later)

    def get_amount(EorI):
        amount = 0
        for item in EorI:
            amount += item.amount
        return amount

    final_rep = {'Net_Income' : get_amount(all_incomes) - get_amount(all_expenses)}
    return render(request, 'summary.html', final_rep)

Вот мой файл summary.html:

<div class="card">
    <div class="card-body">
        </select>
        <div class="form-group">
            <label for="">Choose a date</label>
            <input type="date" value="{{values.date | date:'Y-d-m'}}" class="form-control form-control-sm" name="random_date" />
        </div>

        <input type="submit" value="Submit" class="btn btn-primary btn-primary-sm" />

        <div class="container">
            <div class="col s12 m12 l4">
                <div class="card-panel">
                    <h8 class="bold">Net Budget</h8>
                    <h1 class="bold">${{ Net_Income }}</h1>
                </div>
            </div>
        </div>
    </div>
    </form>
</div>
</div>

вы можете получить доступ к POST или GET параметрам из вашего запроса следующим образом:

request.GET.get('my_var')
request.POST.get('my_var')

В вашем примере summary.html отсутствует тег открытия формы, поэтому вот представление, которое вы можете использовать, предполагая, что вы отправляете информацию в представление:

def Summary(request):
    todays_date = datetime.date.today()
    six_months_later = todays_date + datetime.timedelta(days=180)

    random_date = request.POST.get('random_date')

    all_expenses = Expense.objects.filter(owner=request.user, date__gte=todays_date, date__lte=six_months_later)
    all_incomes = Income.objects.filter(owner=request.user, date__gte=todays_date, date__lte=six_months_later)

    context = {'Net_Income' : get_amount(all_incomes) - get_amount(all_expenses)}

    if random_date:
       filtered_expenses = Expense.objects.filter(owner=request.user, date__gte=todays_date, date__lte=random_date)
       filtered_incomes = Income.objects.filter(owner=request.user, date__gte=todays_date, date__lte=random_date)
       context['Filtered_Income'] = get_amount(filtered_incomes) - get_amount(filtered_expenses)

    def get_amount(EorI):
        amount = 0
        for item in EorI:
            amount += item.amount
        return amount

    
    return render(request, 'summary.html', context)

новое значение будет доступно как Filtered_Income в вашем шаблоне, но только если пользователь ПОСТАВИЛ дату, поэтому вам нужно будет использовать что-то вроде {% if Filtered_Income %}

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