美文网首页百人计划《Django By Example》
Django-09-数据导入导出功能

Django-09-数据导入导出功能

作者: JOooo_ | 来源:发表于2018-07-03 14:49 被阅读52次

    实现admin页面数据的导入导出功能,需要用到第三方的扩展包:
    django-import-export

    官网:http://django-import-export.readthedocs.io/en/latest/index.html

    1. 安装及配置

    安装:pip install django-import-export

    我们需要在admin页面用到导入导出,所以需要在myproject/setting.py中INSTALLED_APPS添加:

    # settings.py
    INSTALLED_APPS = (
        ...
        'import_export',
    )
    

    并执行:

    $ python manage.py collectstatic

    注意:执行collectstatic前需配置一下STATIC_ROOT,在settings.py最底端添加:

    # settings.py
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
    2. import-export与模型集成

    为了将django-import-export与我们的模型集成,我们将在admin.py中创建一个模型资源类ModelResource,该类将描述如何导入或导出资源。

    例如,我们现在有模型:Device。Device表记录网络设备的一些信息。
    按以下代码定义DeviceResource

    # app/admin.py
    
    from import_export import resources
    from .models import Device
    
    class DeviceResource(resources.ModelResource):
    
        class Meta:
            model = Device
            skip_unchanged = True   # 导入数据时,如果该条数据未修改过,则会忽略(默认根据id去匹配数据,可通过定义import_id_fields去更改)
            exclude = ('date', 'attachment')   # 导出数据时,将不会导出exclude里的字段。必须定义fields或exclude中的一项。fields表示导出哪些字段
            export_order = ('device_name', 'id', 'area_company', 'site', 'device_id', 'device_type', 'account', 'password',)    # 定义导出时字段的顺序
    

    而Admin是通过继承ImportExportModelAdmin(或ImportMixin, ExportMixin, ImportExportMixin)来实现导入导出的集成的。按下面的代码定义DeviceAdmin,并注册。

    # app/admin.py
    from import_export.admin import ImportExportModelAdmin
    
    class DeviceAdmin(ImportExportModelAdmin):
        resource_class = BookResource
        ...
    
    admin.site.register(Device, DeviceAdmin)
    

    现在运行后,可以看到admin页面有导入,导出按钮啦

    导出:

    导出

    导入:

    导入

    可以看到,id为1的数据完全没变化,所以会忽略这一条。id为2的该了设备名称,会显示更新。id不在表里的会显示为新增。

    相关文章

      网友评论

      • 程序员同行者:请问下如何在前后端分离项目中使用这个模块,如drf +vue
        程序员同行者:好的,非常感谢~
        JOooo_:@你的小白 前后端分离的话,应该不能用这个模块了。视图的部分都在vue中去实现,可以搜下vue中的数据导入导出方法

      本文标题:Django-09-数据导入导出功能

      本文链接:https://www.haomeiwen.com/subject/ywboyftx.html