#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 ]