Django-09-数据导入导出功能
实现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.pyfrom import_export import resources
from .models import Deviceclass 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 ImportExportModelAdminclass DeviceAdmin(ImportExportModelAdmin):
resource_class = BookResource
...admin.site.register(Device, DeviceAdmin)
现在运行后,可以看到admin页面有导入,导出按钮啦
文章图片
导出:
文章图片
导出 导入:
文章图片
导入
文章图片
【Django-09-数据导入导出功能】可以看到,id为1的数据完全没变化,所以会忽略这一条。id为2的该了设备名称,会显示更新。id不在表里的会显示为新增。
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 使用协程爬取网页,计算网页数据大小
- Java|Java基础——数组
- Python数据分析(一)(Matplotlib使用)
- Jsr303做前端数据校验
- Spark|Spark 数据倾斜及其解决方案
- 数据库设计与优化
- 爬虫数据处理HTML转义字符
- 数据库总结语句
- 没有导入future这个module