写在开头: 建议使用源码安装
xadmin, 这样可以根据自己需求做更灵活的处理.
xadmin提供了非常好用的过滤筛选和导出数据的功能, 但是还是有一些鸡肋的地方.
比如我现在有个需求是只想要导出我所勾选的某一条或几条数据, 会发现xadmin没有这个功能, 而我在这里打勾选中其中几条, 或则选中当前页面所有数据, 它导出的都是全部数据或则筛选后果的所有符合筛选条件的(所有分页)数据,如图:
所以这又需要自己增加功能, 在此我参考了这篇博文, 他使用的是导入原生django-admin
来实现, 我也试过, 但是他这里也有小问题, 导出的时候对于导出选项(导出全部数据/导出所选数据/导出表头等)只能单选, 选择了导出所选数据, 就不能选择是否导出表头等:
而我在这之前又已经在xadmin的导出模块中集成了导出WORD
的功能, 想要用这种方式实现,还要修改更多代码, 目前没有什么特殊需求, 还是决定在xadmin导出模块
基础上修改.
这里又用到最笨的办法, 在代码中全局查找(我用的ide是pycharm)导出表头/导出全部数据
, 可以找到在xadmin源码
路径下文件xadmin/locale/zh_Hans/LC_MESSAGES/django.po
第895行可以看到, 引用导出表头
的位置在文件xadmin/templates/xadmin/blocks/model_list.top_toolbar.exort.html
----这个文件是xadmin
模块组调用的网页, 而用同样方法寻找根据之前使用原生django-admin
时所调用的网页, 发现是这个文件:xadmin/templates/xadmin/blocks/model_list.top_boolbar.importexport.export.html
,
对比两个文件, 就会发现他们其实是相似的, 具体对比过程在此忽略, 我这里直接写出我在这里的修改结果(其中有fixme_code
的地方,就是我添加修改的地方):
{
# xadmin/templates/xadmin/blocks/model_list.top_toolbar.exort.html #}
{
% load i18n %}
{
% load staticfiles %}
<div class="btn-group export">
{
# fixme_code: 增加一个a标签,为 xadmin.plugin.importexport.js 提供id #}
<a id="export-menu" class="dropdown-toggle btn btn-default btn-sm" data-toggle="dropdown" href="#">
<i class="fa fa-share"></i> {
% trans "Export" %} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
{
% for et in export_types %}
<li><a data-toggle="modal" data-target="#export-modal-{
{et.type}}"><i class="fa fa-arrow-circle-down"></i> {
% trans "Export" %} {
{
et.name}}</a></li>
{
% endfor %}
</ul>
{
% for et in export_types %}
<div id="export-modal-{
{et.type}}" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form method="get" action="">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">{
% trans "Export" %} {
{
et.name}}</h4>
</div>