Django的CSV下载queryset [英] django csv download of queryset

查看:190
本文介绍了Django的CSV下载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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆