Django的CSV下载queryset [英] django csv download of queryset
问题描述
这是我的看法.
class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"
def get(self, request, pk, **kwargs):
self.pk = pk
self.pub_from = request.GET.get('pub_date_from')
self.pub_to = request.GET.get('pub_date_to')
self.crawlers = request.GET.get('crawler')
print self.crawlers
return super(SingleNewsView,self).get(request,pk, **kwargs)
def get_context_data(self, **kwargs):
context = super(SingleNewsView,self).get_context_data(**kwargs)
context["form"] = SearchForm#(self.request.GET)
context["something"] = News.objects.filter(category_id=self.pk).filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)
return context
在显示此视图的同一页面上,我需要下载CSV"选项,并希望下载由context ["something"]返回的查询的csv.我怎样才能做到这一点 ??任何帮助.
Here on the same page where this view is displayed I want the "Download CSV" option and want to download the csv of query returned by context["something"]. How can I do that ?? Any help..
我也写过下载csv的视图,但很困惑.
I have also written view to download csv but confused..
def CSVView(request):
response = HttpResponse(content_type="text/csv")
response["Content-Disposition"] = 'attachment; filename=somefilename.csv"'
writer = csv.writer(response)
writer.writerow([News.objects.filter(what goes here ???])
return response
推荐答案
最近,我发现 django- queryset-csv 库非常有用.这样,您的代码就可以归结为:
Recently I have found django-queryset-csv library to be very useful. With this, your code comes down to:
from djqscsv import render_to_csv_response
class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"
def get(self, request, pk, **kwargs):
self.pk = pk
self.pub_from = request.GET.get('pub_date_from')
self.pub_to = request.GET.get('pub_date_to')
self.crawlers = request.GET.get('crawler')
self.format = request.GET.get('format', False)
# check for format query key in url (my/url/?format=csv)
if self.format == 'csv':
qs = News.objects.filter(category_id=self.pk)\
.filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)\
.values('id', 'name')
return render_to_csv_response(qs)
print self.crawlers
return super(SingleNewsView,self).get(request,pk, **kwargs)
def get_context_data(self, **kwargs):
context = super(SingleNewsView,self).get_context_data(**kwargs)
context["form"] = SearchForm#(self.request.GET)
context["something"] = News.objects.filter(category_id=self.pk).filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)
return context
当然,您需要使用自己想要输出的列名,而不是id名称.
Of course you need to use your own column names that you want to output, instead of id, name..
现在,由于我看不到您如何呈现下载csv"按钮,所以我无法告诉您如何向其网址添加格式键.
Now since I don't see how you render the download csv button, I can't tell you how to add format key to it's url..
这篇关于Django的CSV下载queryset的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!