如何下载 CSV 格式的自定义查询集?

How to download a custom queryset in CSV format?

class ExportPlacesView(TemplateView):

    @method_decorator(csrf_exempt)
    def dispatch(self, request, *args, **kwargs):
       return super(ExportPlacesView, self).dispatch(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):

        print request.POST
        places_list=[]
        pk_list=[]
        if request.POST.get('area_choice')!= "all":
            selected_areas=self.request.POST.getlist('area_choice')
            print selected_areas
            areas = Area.objects.filter(pk__in=selected_areas)
            for area in areas:
                places_list.append(Fizzer.objects.filter(coordinates__intersects=area.polygon))
            for place in places_list:
               for p in place:
                 pk_list.append(p.pk)
            self.places=Fizzer.objects.filter(pk__in=pk_list)
        else:
            self.places=Fizzer.objects.all()
        return self.places

这是我过滤名为 Fizzer 的模型的视图。结果过滤的查询集是 sel.places。如何使用 [=17] 下载 CSV 格式的查询集 self.places =] 在 html

要生成的基本伪代码和 return csv:

import csv
from django.http import HttpResponse

def csv(self):
   response = HttpResponse(content_type='text/csv')
   filename = u"fizzer.csv"
   response['Content-Disposition'] = u'attachment; filename="{0}"'.format(filename)
   writer = csv.writer(
      response,
      delimiter=';',
      quotechar='"',
      quoting=csv.QUOTE_ALL
   )

   for f in Fizzer.objects.all():
      writer.writerow([f.foo, f.bar])

   return response

主题演讲:

  • 您必须创建具有 text/csv 内容类型的 HttpResponse 对象

  • 使用 Python 的 csv 模块生成您的 .csv

  • 将查询集转换为 csv 值

  • return 回应