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