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