添加excel插件逻辑
首先在 xadmin 的 plugins 下新建一个 excel.py文件,插入代码如下:
# coding:utf-8 import xadmin from xadmin.views import BaseAdminPlugin, ListAdminView from xadmin.plugins.utils import get_context_dict from django.template import loader # excel 导入 class ListImportExcelPlugin(BaseAdminPlugin): import_excel = False # 入口函数, 通过此属性来指定此字段是否加载此字段 def init_request(self, *args, **kwargs): return bool(self.import_excel) # 如果加载, 则执行此函数添加一个 导入 字段 def block_top_toolbar(self, context, nodes): context = get_context_dict(context or {}) # 用此方法来转换 nodes.append(loader.render_to_string('xadmin/excel/model_list.top_toolbar.import.html', context=context)) xadmin.site.register_plugin(ListImportExcelPlugin, ListAdminView)
在xadmin中注册excel插件
把excel注册到 xadmin/plugins/__init__.py文件中
添加excel前面模板
在xadmin的 templates/xadmin/ 目录下新建一个excel目录,新建模板文件model_list.top_toolbar.import.html,插入代码如下:
{% load i18n %} <div class="btn-group export"> <a class="dropdown-toggle btn btn-default btn-sm" data-toggle="dropdown" href="#"> <i class="icon-share"></i> 导入 <span class="caret"></span> </a> <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> <li><a data-toggle="modal" data-target="#export-modal-import-excel"><i class="icon-circle-arrow-down"></i> 导入 Excel</a></li> </ul> <script> function fileChange(target) { //检测上传文件的类型 var imgName = document.all.submit_upload.value; var ext, idx; if (imgName == '') { document.all.submit_upload_b.disabled = true; alert("请选择需要上传的 xls 文件!"); return; } else { idx = imgName.lastIndexOf("."); if (idx != -1) { ext = imgName.substr(idx + 1).toUpperCase(); ext = ext.toLowerCase(); {# alert("ext="+ext);#} if (ext != 'xls' && ext != 'xlsx') { document.all.submit_upload_b.disabled = true; alert("只能上传 .xls 类型的文件!"); return; } } else { document.all.submit_upload_b.disabled = true; alert("只能上传 .xls 类型的文件!"); return; } } } </script> <div id="export-modal-import-excel" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <form method="post" action="" enctype="multipart/form-data"> {% csrf_token %} <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4 class="modal-title">导入 Excel</h4> </div> <div class="modal-body"> <input type="file" onchange="fileChange(this)" name="excel" id="submit_upload"> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button> <button class="btn btn-success" type="submit" id="submit_upload_b"><i class="icon-share"></i> 导入 </button> </div> </form> </div><!-- /.modal-content --> </div><!-- /.modal-dalog --> </div><!-- /.modal --> </div>
字段展示处理
在相关 class 中通过此字段进行处理,设置为 True 表示可以添加导入字段:
import_excel = True
class InformationContentXadmin(object): """内容编辑""" ........ import_excel = True
逻辑处理
在相关的 class 中重写 post 方法
def post(self, request, *args, **kwargs): # 导入逻辑 if 'excel' in request.FILES: pass # 此处是一系列的操作接口, 通过 request.FILES 拿到数据随意操作 return super(CourseAdmin, self).post(request, args, kwargs) # 此返回值必须是这样