django-import-export

django-import-export = "^2.4.0"

settings.py

1
2
3
4
5
INSTALLED_APPS += [
    ...
    "import_export",
    ...
]

resources.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from import_export import resources

from .. import models


class DepartmentResource(resources.ModelResource):
    class Meta:
        model = models.Department
        import_id_fields = ["code", "company_code"]     # 複合キー
        exclude = ["company", "jobposts", "origin", "status"]   # 除外

    def get_instance(self, instance_loader, row):
        instance = super().get_instance(instance_loader, row)
        exclude = []
        if instance:
            exclude += ["is_m03", "is_tmb"] # 更新除外
        
        list(map(lambda i: row.pop(i, None), exclude))
        return instance

admin.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from import_export.admin import ImportExportActionModelAdmin

from . import inlines, resources


class BaseModelAdmin(ImportExportActionModelAdmin):
    exclude = ["created_at"]
    readonly_fields = ["updated_at"]

@admin.register(models.Department)
class DepartmentAdmin(BaseModelAdmin):
    ...
    resource_class = resources.DepartmentResource