Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将CSS按钮添加到Django admin以实际触发逻辑_Django_Django Views_Export_Django Queryset - Fatal编程技术网

如何将CSS按钮添加到Django admin以实际触发逻辑

如何将CSS按钮添加到Django admin以实际触发逻辑,django,django-views,export,django-queryset,Django,Django Views,Export,Django Queryset,我添加到Django管理员中的“导出”按钮不会挂接到我的视图,即使按钮本身显示在屏幕上。我在SO上使用了几个教程来让按钮可见,但单击按钮时它什么也不做,只会重新加载相同的页面。我有一种感觉,我如何设置它的结构是错误的,或者我没有正确地将数据库中的数据传递给它 我假设这里有我遗漏的错误 如何将我的导出函数中已经存在的数据传递给我的导出函数 数据库我想我必须做一个查询集,但我不确定我是否 实际获取数据或将其放在正确的位置。这个 按钮用于让用户导出已创建的所有数据 已存储(例如,特定类型的所有记录)

我添加到Django管理员中的“导出”按钮不会挂接到我的视图,即使按钮本身显示在屏幕上。我在SO上使用了几个教程来让按钮可见,但单击按钮时它什么也不做,只会重新加载相同的页面。我有一种感觉,我如何设置它的结构是错误的,或者我没有正确地将数据库中的数据传递给它

  • 我假设这里有我遗漏的错误
  • 如何将我的导出函数中已经存在的数据传递给我的导出函数 数据库我想我必须做一个查询集,但我不确定我是否 实际获取数据或将其放在正确的位置。这个 按钮用于让用户导出已创建的所有数据 已存储(例如,特定类型的所有记录)到Excel文件中
My app>css>categories.css(创建按钮)

我对
change\u list.html
模板进行了更改,以使我的按钮可见(我将其放在管理员更改列表的搜索栏之后):

名为excel_utils.py的文件,我的导出到excel函数位于该文件中:

from io import StringIO
import xlsxwriter
from django.utils.translation import ugettext
from .models import Attorney


def WriteToExcel(attorney_range):
    attorney_range = Attorney.objects.all().filter(active=True)
    output = StringIO.StringIO()
    workbook = xlsxwriter.Workbook(output)
    worksheet_s = workbook.add_worksheet("Summary")

    # excel styles here

    attorney_range = Attorney.objects.all()
    attorney_list = []
    for x in attorney_range:
        attorney_list.append(x)
    for idx, data in enumerate(attorney_list):
        row = 5 + idx
        worksheet_s.write_boolean(row, 1, cell_center)
        worksheet_s.write_string(row, 2, attorney_list.index(2))
给按钮接线 如何调用自定义视图并不明显。为呈现管理页面而调用的视图内置于
django_admin
包中。在管理员模板中使用
时,您要求原始管理员视图处理请求。因为您的代码位于自定义视图中,所以这可能不是您想要的。您可以选择:

0)将代码移动到管理视图处理器中。没有发生

1) 保留表单按钮并设置
action=“/your/custom/view”
以调用自定义视图。如果这样做,您仍然需要检查请求对象的GET参数(
If request.GET.GET('export')
)并相应地进行分支,或者

2) 放弃表单按钮,只需放置一个标准的
。如果不仔细检查示例代码中的细节,您的方法通常是正确的。以下几点提示:

只有在确定需要查询集后才能生成查询集。而不是:

attorney_range = Attorney.objects.all().filter(active=True)
if request.GET.get('export'):
    ...

您在视图中创建它并将其传递到helper函数中的意图是正确的。无需在helper函数中重新创建它两次

如果可以,将
WriteToExcel()
函数泛化,这样它就不会关心传入的是什么模型或导出的是什么字段类型

from django.template import RequestContext

def excel_view(request):
    attorney_range = Attorney.objects.all().filter(active=True)
    if request.GET.get('export'):
        if 'export' in request.GET:
            response = HttpResponse(content_type='application/vnd.ms-excel')
            response[
                'Content-Disposition'] = 'attachment; filename=Report.xlsx'
            xlsx_data = WriteToExcel(attorney_range)
            response.write(xlsx_data)
            return response
        else:
            return render("change_list.html",
                          context_instance=RequestContext(request),
                          template_name='change_list.html')
from io import StringIO
import xlsxwriter
from django.utils.translation import ugettext
from .models import Attorney


def WriteToExcel(attorney_range):
    attorney_range = Attorney.objects.all().filter(active=True)
    output = StringIO.StringIO()
    workbook = xlsxwriter.Workbook(output)
    worksheet_s = workbook.add_worksheet("Summary")

    # excel styles here

    attorney_range = Attorney.objects.all()
    attorney_list = []
    for x in attorney_range:
        attorney_list.append(x)
    for idx, data in enumerate(attorney_list):
        row = 5 + idx
        worksheet_s.write_boolean(row, 1, cell_center)
        worksheet_s.write_string(row, 2, attorney_list.index(2))
attorney_range = Attorney.objects.all().filter(active=True)
if request.GET.get('export'):
    ...
if request.GET.get('export'):
    attorney_range = Attorney.objects.all().filter(active=True)
    ...