Django django-import-export
导入导出外键
from import_export import fields, resources
from import_export.widgets import ForeignKeyWidget
class BookResource(resources.ModelResource):
# 给Resource添加一个自定义字段,指向模型的关系对象,用widget做格式规范
author = fields.Field(
column_name='author',
attribute='author',
widget=ForeignKeyWidget(Author, 'name'))
# 在字段列表里加上这个自定义字段
class Meta:
fields = ('author',)导入导出中文格式
field.Field()功能很强大,可以覆写模型原本的字段以添加功能,也可添加模型中不存在的新字段,用于输出经过计算后的数据。 有时候模型字段的定义处verbose_name已经是中文了,这时可以直接拿来用,这就是第二种方法, 原理是重写ModelResource的成员方法
如果只需要导出表表头为中文,重写get_export_fields();
如果只需要导入表表头为中文,重写get_import_fields();
如果导入和导出的表头都需要为中文,只重写get_fields()即可
下面规定联合主键,决定是update还是create,可以避免重复导入相同的记录
导入文件时候,必须是 utf-8 格式
使用记事本打开并重新保存一下,为 utf-8 格式
修改默认导出文件格式
相比之下,CSV格式的导出速度特别快,所以可以规定只能导出这种格式以提高使用体验。(如果需要其他格式可以再另存为啊) 在admin.py中按照如下代码修改
使用小部件widget实现布尔类型和“是否”的转换
导入时中文的“是否”都不识别,导出时只能显示0和1,以下是使用小部件widget的解决方案 在resource.py中按如下代码修改
如果模型字段做了null=True的设置,这里就可以处理“真、假、未知”三种状态 如果模型字段设置了blank=True,则管理界面的此字段变为非必填。但ForeignKey不可设置blank=True,能正常保存但会导致此纪录在列表页不可见,可能是BUG。
实例
model.py
resources.py
admin.py
Last updated