Python Django 1.11:使用类将queryset导出到csv
我在使用我的查询类的子类将Django查询的结果导出到csv时遇到问题,如这里所建议的 我最终得到一个页面未找到(404)错误。这是相关代码 views.pyPython Django 1.11:使用类将queryset导出到csv,python,django,csv,django-templates,django-views,Python,Django,Csv,Django Templates,Django Views,我在使用我的查询类的子类将Django查询的结果导出到csv时遇到问题,如这里所建议的 我最终得到一个页面未找到(404)错误。这是相关代码 views.py class QueryResultsView(ListView): template_name = 'query/query_results.html' model = StDetail context_object_name = "object_list" def get_queryset(self)
class QueryResultsView(ListView):
template_name = 'query/query_results.html'
model = StDetail
context_object_name = "object_list"
def get_queryset(self):
form_input = self.request.GET
filters = {"person_name": form_input.get('name'),
"city": form_input.get('city'),
}
# delete keys that are None
filters = {k: v for k, v in filters.items() if v is not ''}
self.detail_data = get_list_or_404(self.model, **filters)
return(self.detail_data)
def get_context_data(self, **kwargs):
context = super(QueryResultsView, self).get_context_data(**kwargs)
context['query_results'] = self.get_queryset()
return(context)
class QueryResultsCsvView(QueryResultsView):
# Subclass of above view, to produce a csv file
template_name = 'query/QueryResults.csv'
content_type = 'text/csv'
url.py
app_name = QueryConfig.name
urlpatterns = [
...
url(r'^query',
QueryFormView.as_view(),
name='person-query'),
url(r'^results',
QueryResultsView.as_view(),
name='query-results'),
url(r'^results/csv/$',
QueryResultsCsvView.as_view(),
name='query-results-csv'),
]
query_results.html
...
<a href="{% url 'query:query-results-csv' %}">Download Results</a>
...
查询工作没有任何问题。然而,当我点击下载结果链接时,我得到一个页面未找到(404)错误。有人能告诉我我遗漏了什么吗?你的第一个问题是
r'^results'
匹配results/csv/
以及results
,因为它不使用$
匹配URL的结尾
尝试以下方法(我添加了尾随斜杠以匹配通常的Django样式)
完成此操作后,下一个问题是,您只需链接到查询结果csv
结果视图,但没有向其传递任何表单数据。在查询结果
视图的模板中,您可以将同一查询字符串更改为:
<a href="{% url 'query:query-results-csv' %}?{{ request.GET.urlencode }}">Download Results</a>
如果更改您的
get\u queryset()
返回到正常的django queryset会怎么样?有用吗?谢谢。那么一个普通的django queryset应该是什么样子呢?谢谢你的帮助。那么,我该如何向该视图传递与查询结果相同的表单数据呢?您可以提交表单,提交方式与提交查询结果的方式相同,也可以在链接中包含查询字符串。我想我遇到的部分问题是,我希望能够将查询中的字段留空。我有没有办法通过模板传递查询字符串的KWARG?我的表单对象被设置为required=False。我不确定通过模板传递查询字符串的kwargs是什么意思。您可以将当前的查询字符串更改为
谢谢!这是非常有帮助的!这为我提供了生成.csv下载所需的功能。我的url模式的工作原理与我最初使用的相同,但是能够将查询字符串发送到我的子类是关键。你可以修改你的答案,我会接受的。
urlpatterns = [
url(r'^query/$',
QueryFormView.as_view(),
name='person-query'),
url(r'^results/$',
QueryResultsView.as_view(),
name='query-results'),
url(r'^results/csv/$',
QueryResultsCsvView.as_view(),
name='query-results-csv'),
]
<a href="{% url 'query:query-results-csv' %}?{{ request.GET.urlencode }}">Download Results</a>
filters = {k: v for k, v in filters.items() if v}