【问题标题】:How to export filtered models into an excel file?如何将过滤后的模型导出到 Excel 文件中?
【发布时间】:2019-06-09 07:58:49
【问题描述】:

我已经使用 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>

【问题讨论】:

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


    【解决方案1】:

    查看django-excel-response

    有基于类的视图和 mixins

    class ModelExportView(ExcelView):
        model = SomeModel
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 2021-06-18
      • 2013-03-08
      • 1970-01-01
      相关资源
      最近更新 更多