一般讨论

django xadmin 开启excel导入功能,请指教。

2 条回复 · 3899 次阅读参与讨论 ↓举报

文件路径:xadmin/plugins/excel.py

from xadmin.sites import site
from xadmin.views import BaseAdminPlugin, ListAdminView
from django.template import loader
from xadmin.plugins.utils import get_context_dict

#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):
        nodes.append(loader.render_to_string('xadmin/excel/model_list.top_toolbar.import.html', context=get_context_dict(context)))


site.register_plugin(ListImportExcelPlugin, ListAdminView)

模版文件: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> 导入1 <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">&times;</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>

adminx.py文件

class maintenanceRecordListAdmin(object):
    list_display = [...]
    search_fields = [...]
    list_filter = [...]
    list_editable = [...]
    readonly_fields = [...]

    #excel导入导出功能
    list_export = ['xls', 'xml', 'json']
    import_excel = True

    def post(self, request, *args, **kwargs):
        #  导入逻辑
        if 'excel' in request.FILES:
            pass
        return super(maintenanceRecordListAdmin, self).post(request, args, kwargs)

启动后,没有显示‘导入’ button, 求教

参与讨论 2

  • 飞奔的五花肉

    问题解决,plugins/init.py 注册自定义插件。

    PLUGINS = (
            '..'
        'excel'
    )
    
    
    def register_builtin_plugins(site):
        from importlib import import_module
        from django.conf import settings
    
        exclude_plugins = getattr(settings, &#x27;XADMIN_EXCLUDE_PLUGINS', [])
    
        [import_module(&#x27;xadmin.plugins.%s' % plugin) for plugin in PLUGINS if plugin not in exclude_plugins]