环境
Python 3.7.7
Django 2.2.16
django-import-export 2.4.0
示例模型
模型 model.py
class Task(models.Model):
name = models.CharField(verbose_name='任务名称', unique=True, max_length=255)
statuss = (
(0, '创建中'),
(1, '已创建'),
(2, '进行中'),
(3, '已结束'),
(4, '作废中'),
(5, '已作废'),
)
status = models.IntegerField(verbose_name='任务状态', choices=statuss, default=0)
管理 admin.py
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
resource_class = TaskResource
导出字段变更显示名称
admin.py
from django.contrib import admin
from import_export import resources
from import_export.fields import Field
from .models import *
class TaskResource(resources.ModelResource):
name = Field(attribute='name', column_name='任务名称')
class Meta:
model = Task
fields = ['name']
导出 choices 类型字段的显示值
admin.py
from django.contrib import admin
from import_export import resources
from import_export.fields import Field
from .models import *
class TaskResource(resources.ModelResource):
name = Field(attribute='name', column_name='任务名称')
status = Field(attribute='get_status_display', column_name='任务状态')
class Meta:
model = Task
fields = ['name', 'status']
#fields = ['name'] # 可省略 status
导出使用自定义函数的字段
admin.py
from django.contrib import admin
from import_export import resources
from import_export.fields import Field
from .models import *
class TaskResource(resources.ModelResource):
name = Field(attribute='name', column_name='任务名称')
status = Field(attribute='get_status_display', column_name='任务状态')
my_sn = Field(column_name='自定义序列号')
class Meta:
model = Task
fields = ['my_sn', 'name', 'status']
#fields = ['my_sn'] # 可省略 name 与 status
def dehydrate_my_sn(self, task):
return "自定义 SN:" + str(task.id)
fields 与 Field 字段说明
Field:控制需要导出的字段。attribute 起覆盖原字段作用,若省略,则表示自定义不存在的字段。
fields:控制除 Field 外,还需要导出的字段。如果省略:则导出所有未被 Field 所使用的字段。
参考
stackoverflow.com/questions/39674976/django-import-export-choices-field
django-import-export.readthedocs.io/en/latest/getting_started.html#advanced-data-manipulation-on-export