django:将过滤后的数据下载为 csv

django: download filtered data as csv

嘿!

我想将我的数据下载为 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__"

我必须将过滤器参数添加到 url 才能使它们正常工作。所以解决方案在于模板而不是视图:)

<div class="col">
            <a href="{% url 'csv_download:download_institutions' %}?{{ request.GET.urlencode }}">Download CSV</a>
</div>

编辑:

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