django中xadmin中如何实现导入导出功能

安装:

注意版本兼容问题

pip install django-import-export

1.  settings.py中注册应用

INSTALLED_APPS = [
    ......
    # 注册导入功能
    'import_export',
]

2.  xadmin.py中代码

import xadmin

from import_export import resources

class MyCourseResource(resources.ModelResource):
    """自定义导入导出功能类"""
    class Meta:
        model = Course
        # 定义导出数据的字段
        # fields = ["name", "desc", "learn_times", "students"]
        # 定义不导出的字段
        # exclude = []

# @xadmin.sites.register(Course)
class CourseAdmin(object):
    list_display = ["name", "desc", "degree", "learn_times", "students", "show_image", "goto_course"]
    
    # 导入导出配置,此处也可以只配置一个导入功能或导出功能,而把另一个功能关掉
    import_export_args = {"import_resource_class": MyCourseResource,
                          "export_resource_class": MyCourseResource}

3.  效果图

由于import_export带有导入导出功能,xadmin也自带导出功能,有个两个导出,我们可以把xadmin自带的export导出功能插件从plugins中__init__.py中将export注释掉即可

4. 如果导入功能报错

报错中间代码是:from import_export.admin import DEFAULT_FORMATS, SKIP_ADMIN_LOG, TMP_STORAGE_CLASS
ImportError: cannot import name 'SKIP_ADMIN_LOG'

报错最后代码是:"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'users.UserProfile' that has not been installed

该错误排查了好长时间,原因是xadmin2.2中plugins中自带的importexport插件与虚拟环境中安装的import_export插件不兼容,

解决方法有两种:

(1)卸载并重新安装低版本的     

pip uninstall django-import-export    

pip install django-import-export == 2.4.0

(2)不卸载最新的django-import-export,而是在虚拟环境中site-packages下的import-export目录下的admin.py中加个这两个常量

SKIP_ADMIN_LOG = getattr(settings, 'IMPORT_EXPORT_SKIP_ADMIN_LOG', False)
TMP_STORAGE_CLASS = getattr(settings, 'IMPORT_EXPORT_TMP_STORAGE_CLASS',
                            TempFolderStorage)

5. 上传时的效果

猜你喜欢

转载自blog.csdn.net/weixin_42289273/article/details/115183674