Как написать функцию представления для экспорта отфильтрованных данных в файл excel в Django?

У меня есть модель, которая имеет пять ForeignKey полей, что в принципе работает как мастер-данные, включающие почти все модели.

class IpdReport(models.Model):
    patient=models.ForeignKey(Patient, on_delete=CASCADE)
    package=models.ForeignKey(Package, on_delete=CASCADE)
    receivables=models.ForeignKey(Receivables, on_delete=CASCADE, blank=True, null=True)
    discharge=models.ForeignKey(Discharge, on_delete=CASCADE, blank=True, null=True)
    realization=models.ForeignKey(Realization, on_delete=CASCADE, blank=True, null=True)

    @property
    def track_id(self):
        ......

Вид:

def ipd_report_view(request):
    report=IpdReport.objects.all()
    print(report[0].patient.name)
    total1=report.aggregate(Sum('realization__amount_received'))
    total2=report.aggregate(Sum('realization__deficit_or_surplus_amount'))
    context={'report': report, 'total1':total1, 'total2':total2}
    return render(request, 'account/ipdreport.html', context)

Шаблон:

Как вы видите, в шаблоне под отчетом есть кнопка Export. Функция просмотра для Export следующая:

Приведенная выше функция возвращает только полные данные.

Теперь у меня есть формы для фильтрации этих данных на основе различных требований. Например, у меня есть функция представления, которая фильтрует данные по имени, предоставленному пользователем:

def sort_by_name(request):
    if request.method=='POST':
        print(request.POST.get('enter_name'))
        nm=request.POST.get('enter_name')
        report=IpdReport.objects.filter(patient__name__icontains=nm)
        total1=report.aggregate(Sum('realization__amount_received'))
        total2=report.aggregate(Sum('realization__deficit_or_surplus_amount'))
        context={'report': report, 'total1':total1, 'total2':total2}
        return render(request, 'account/ipdreport.html', context)
    else:
        sort=EnterName()
        return render(request, 'account/sort.html', {'sort':sort})

, который отображает тот же самый, ipdreport.html шаблон. Это означает, что под результатом автоматически появляется кнопка Export, при нажатии на которую экспортируются все данные, а не отфильтрованные. Мне нужен способ экспортировать данные, которые нужны пользователю.

Один из способов, который приходит мне в голову, заключается в том, что я создаю различные шаблоны, отображающие отфильтрованные данные для каждого вида фильтра, и пишу для них отдельные представления экспорта. Но это кажется долгим процессом. Это возможно, но немного долго. Мне интересно, есть ли способ достичь желаемого результата, не идя длинным путем. Какие-нибудь предложения с вашей стороны?

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