从临时文件导出Django report builder.xls报告

2024-05-07 02:07:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django报表生成器,并试图将我创建的报表之一导出为xls文件,这是我在中的函数视图.py地址:

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.views.generic import View
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.utils import timezone
from ..form import UsersForm, CostItemsForm, GroupsForm, SubGroupsForm, SubGroups2Form, CostElementsForm, RequestsForm
from ..models import Groups, CostItems, Requests, CostElements, Positions, ItemChangeLogs, ElementChangeLogs
from datetime import date, datetime
from report_builder.models import Report
from report_utils.mixins import DataExportMixin, generate_filename


class DownloadFileView(DataExportMixin, View):


    def dispatch(self, *args, **kwargs):
        return super(DownloadFileView, self).dispatch(*args, **kwargs)

    def process_report(self, report_id, user_id,
                       file_type, to_response, queryset=None):
        report = get_object_or_404(Report, pk=2)
        user = request.user
        if not queryset:
            queryset = report.get_query()

        display_fields = report.get_good_display_fields()

        objects_list, message = self.report_to_list(
            queryset,
            display_fields,
            user,
            preview=False,)
        title = re.sub(r'\W+', '', report.name)[:30]
        header = []
        widths = []
        for field in display_fields:
            header.append(field.name)
            widths.append(field.width)

        if to_response:
                return self.list_to_xlsx_response(
                    objects_list, title, header, widths)

因此,我从模板调用此视图:

{% extends 'cost_control_app/base_cost_control_app.html' %}
{% block contentsubbase %}
{% load widget_tweaks %}

<div class="center-panel">
<h3>Reports</h3>
        {% csrf_token %}
        <br>
        <div class="table-responsive">
            <a href="{% url 'cost_control_app:report_download' %}" >Export</a>
        </div>
</div>
{% endblock contentsubbase %}

这是我的网址.py连接所有:

from django.conf.urls import include, url, patterns
from django.contrib.auth import views as auth_views
from django.contrib.auth.views import login, logout
from .views import views

urlpatterns = patterns(
    '',
    url(r'^reports/download/$', views.DownloadFileView.as_view(), name = "report_download"),
)

问题是,没有工作,当我点击一个叫“导出”的标签,它会带我到空模板,但没有保存文件对话框或什么都没有…有什么想法请?你知道吗

提前谢谢


Tags: todjangofromimportselfreportauthfields
1条回答
网友
1楼 · 发布于 2024-05-07 02:07:13

找到它(对于任何有相同问题的人来说),我缺少def get where参数where set,这是视图.py更新后,以一些默认值为例:

class DownloadFileView(DataExportMixin, View):


    def process_report(self, report_id, user_id,
                       file_type, to_response, queryset=None):
        report = get_object_or_404(Report, pk=report_id)
        user = User.objects.get(pk=user_id)
        if not queryset:
            queryset = report.get_query()

        display_fields = report.get_good_display_fields()

        objects_list, message = self.report_to_list(
            queryset,
            display_fields,
            user,
            preview=False,)
        title = re.sub(r'\W+', '', report.name)[:30]
        header = []
        widths = []
        for field in display_fields:
            header.append(field.name)
            widths.append(field.width)

        if to_response:
            return self.list_to_xlsx_response(
                objects_list, title, header, widths)


    def get(self, request, *args, **kwargs):
        report_id = 2
        file_type = 'xls'
        user_id = 2
        return self.process_report(
            report_id, user_id, file_type, to_response=True)

相关问题 更多 >