有时候,我们需要批量往数据库插入数据,如果能通过django admin后台的拓展配置实现,就再好不过了。

    在网上找到一个现成的插件,通过简单配置就可实现admin后台的文件上传导入,赞!

    这里以实际项目中的一个model为例,看下配置的步骤

    首先我们要安装 一个插件,这个插件 既支持导入也可以导出。

    1. pip install django-import-export

    在我们的settings 的installed_app 里添加上这个app

    1. INSTALLED_APPS = [
    2. """
    3. 其他导入
    4. """
    5. 'import_export',
    6. ]

    接下来,结合我自己的model来配置咯

    我的model如下:

    1. class SensitiveColumn(models.Model):
    2. """sensitive column for desensitization """
    3. db = models.CharField(max_length=100, verbose_name='数据库')
    4. table = models.CharField(max_length=100, verbose_name='表')
    5. column = models.CharField(max_length=100, verbose_name='字段')
    6. comment = models.CharField(max_length=100, verbose_name='注释', blank=True, null=True)
    7. class Meta:
    8. verbose_name = u'敏感字段'
    9. verbose_name_plural = u'敏感字段表'

    在这个model所在的app下创建resource.py 文件:

    1. from import_export import resources
    2. from common.models import SensitiveColumn
    3. class SensitiveColumnResource(resources.ModelResource):
    4. """import"""
    5. class Meta:
    6. model = SensitiveColumn
    7. import_id_fields = ['db', 'table', 'column'] # 这里决定了update_or_create,可以避免重复导入

    接着写我们的admin.py文件:

    1. from import_export.admin import ImportExportModelAdmin
    2. from .resource import SensitiveColumnResource
    3. from .models import SensitiveColumn
    4. @admin.register(SensitiveColumn)
    5. class SensitiveColumnsAdmin(ImportExportModelAdmin):
    6. resource_class = SensitiveColumnResource
    7. list_display = ('id', 'db', 'table', 'column', 'comment')