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
]
嘿!
我想将我的数据下载为 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
]