gpt4 book ai didi

python - 在 Django Admin 中触发自定义功能

转载 作者:行者123 更新时间:2023-12-01 03:58:30 28 4
gpt4 key购买 nike

我是 Django 和 Django Admin 的新手,所以我仍然不是 100% 知道事物的正确名称。

我想在使用模型的管理应用程序时向 ListView 添加“全部下载”按钮/链接/操作。理想情况下就像“添加”按钮一样。我尝试了一个自定义操作,这几乎让我到达那里,但它坚持要求我在触发之前至少选择一行。

我非常注重在这里快速提供结果 - 只要我可以向我的用户解释如何使用该应用 - 然后工作就完成了。

我使用的是 Django 1.9。

最佳答案

第1步:首先覆盖位于/app/templates/admin/app/change_list.html的change_list.html。(如果不存在,则创建一个)

change_list.html 的内容如下所示

{% block object-tools %}
{% if has_add_permission %}
<ul class="grp-object-tools">
{% block object-tools-items %}
<li><a href="export/" class="grp-state-focus">
Export Data
</a></li>
<li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="grp-add-link grp-state-focus">
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
</a></li>
{% endblock %}
</ul>
{% endif %}
{% endblock %}

第2步:在此表单的admin.py中添加get_urls方法

def get_urls(self):
urls = super(classname, self).get_urls() # replace wit your class name
my_urls = patterns(
'',
url(r'^export/$',
ExportCampaignView.as_view(), name='export'),
)
return my_urls + urls

第3步:在views.py中添加此逻辑来下载文件

XLSX_CONTENT_TYPE = ('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

class ExportCampaignView(generic.View):

def get(self, request, *args, **kwargs):
xlsx_file = self.create_xlsx()
response = HttpResponse(xlsx_file, content_type=XLSX_CONTENT_TYPE)
response['Content-Disposition'] = (
'attachment; filename=campaign.xlsx')
return response

@staticmethod
def create_xlsx():
"""
:return tablib.Dataset: Campaign data.
"""
output = StringIO()
workbook = xlsxwriter.Workbook(output)
sheet = workbook.add_worksheet()
bold_with_bg = workbook.add_format(
{'bold': True, 'bg_color': 'silver'})
date_format = workbook.add_format({'num_format': 'dd.mm.YYYY'})

headers = [
_(u'col1'), _(u'col2'), _(u'col3'),

]


data = Model.objects.all()

for row_idx, row in enumerate(data, start=1):
sheet.write(row_idx, 0, row.col1)
sheet.write(row_idx, 1, row.col2)
sheet.write(row_idx, 1, row.col3)

workbook.close()
output.seek(0)
return output

关于python - 在 Django Admin 中触发自定义功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020562/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com