如何将筛选的模型导出到Excel文件?

时间:2019-06-09 07:58:49

标签: django python-3.x model-view-controller django-views xlsxwriter

我已经使用QuerySet过滤了模型并将其显示在页面上。我想单击一个下载按钮来下载一个包含上述模型的excel文件(对不起,我是初学者,谢谢)

我试图在用户单击搜索后立即创建一个excel文件,并将其保存到数据库中,并在用户单击通过ID下载时进行下载。 我还尝试将QuerySet作为参数发送,但我不知道该正则表达式提供给该URL。

Views.py:

class SearchView(View):
    template_name = 'auto_project/search_form.html'
    form_class=ExcelFile
    qs=''


    def get(self,request):
        qs = report.objects.all()
        date1 = self.request.GET.get('date1','')
        date2 = self.request.GET.get('date2','')

        #Filter Stuff

        return render(self.request,self.template_name,{'qs':qs})

    def post(self,request):
        form=self.form_class(request.POST)

        if form.is_valid():
            f = form.save(commit=False)

            response = HttpResponse(content_type='application/vnd.ms-excel')
            response['Content-Disposition'] = 'attachment; filename=Report.xlsx'
            xlsx_data = WriteToExcel(self.qs) #Function
            response.write(xlsx_data)
            f.file = response
            f.save()

        return render(self.request,self.template_name,{'f':f})

def report_download(request,file_id):
    response = Excel.objects.get(id=file_id)
    return response

#forms.py:

class ExcelFile(forms.ModelForm):
    class Meta:
        model = Excel
        fields = ['id','file']

#urls.py:

urlpatterns = [
url(r'^search/$',views.SearchView.as_view(),name='search'),
url(r'^download/(?P<file_id>[0-9]+)/$',views.report_download,name='dload'),]



#search_from.html:

<form action='.' method='GET'>
    <!-- some input fields and a submit button-->
</form>

<button type="submit"><a href="{% url 'auto_project:dload' f.id %}">Download</a></button>

1 个答案:

答案 0 :(得分:0)

签出django-excel-response

有基于类的视图以及mixins

class ModelExportView(ExcelView):
    model = SomeModel

您当然可以根据需要操纵代码。