django: загрузка отфильтрованных данных в формате csv

#django #django-views #django-templates #export-to-csv #django-filters

Вопрос:

Хей!

Я хочу загрузить свои данные в виде csv-файла. Моя проблема в том, что я не могу применить свои фильтры в загруженном csv, он всегда будет выдавать мне весь список.

Я попытался соединить две функции, но это работает не так, как ожидалось. Но они оба прекрасно справляются сами по себе.

Кто-нибудь знает, как этого добиться? Или знает, что я делаю не так?

Любая помощь будет признательна! 🙂

 # views.py  def download_csv(request):  institutions = Institution.objects.all()  filter = InstitutionFilter(request.GET, queryset=institutions).qs   response = HttpResponse(content_type='text/csv')  response['Content-Disposition'] = 'attachment; filename="institutions.csv"'   writer = csv.writer(response)   writer.writerow(['Name', "Abbreviation", "Parent Institution", "Phone Number"])   for institution in filter.values_list('name', 'abbreviation', 'parent_institution__name', 'contact_details'):  writer.writerow(institution)   return response  
 # filters.py  class InstitutionFilter(django_filters.FilterSet):   name = CharFilter(field_name="name", lookup_expr="icontains")   class Meta:  model = Institution  fields = "__all__"  

Ответ №1:

Мне пришлось добавить параметр фильтра в URL-адрес, чтобы заставить их работать. Таким образом, решение заключается в шаблоне, а не в представлениях 🙂

 lt;div class="col"gt;  lt;a href="{% url 'csv_download:download_institutions' %}?{{ request.GET.urlencode }}"gt;Download CSVlt;/agt; lt;/divgt;  

Редактировать:

 #csv_download/urls.py app_name = "csv_download" urlpatterns = [  path("export-institution/", download_csv_institution, name="download_institutions"), ]  
 # general urls.py  urlpatterns = [  path("admin/", admin.site.urls, name="admin"), # admin site  path("download_csv/", include("csv_download.urls")), # download app ]