有时候,我们需要批量往数据库插入数据,如果能通过django admin后台的拓展配置实现,就再好不过了。
在网上找到一个现成的插件,通过简单配置就可实现admin后台的文件上传导入,赞!
这里以实际项目中的一个model为例,看下配置的步骤
首先我们要安装 一个插件,这个插件 既支持导入也可以导出。
pip install django-import-export
在我们的settings 的installed_app 里添加上这个app
INSTALLED_APPS = ["""其他导入"""'import_export',]
接下来,结合我自己的model来配置咯
我的model如下:
class SensitiveColumn(models.Model):"""sensitive column for desensitization """db = models.CharField(max_length=100, verbose_name='数据库')table = models.CharField(max_length=100, verbose_name='表')column = models.CharField(max_length=100, verbose_name='字段')comment = models.CharField(max_length=100, verbose_name='注释', blank=True, null=True)class Meta:verbose_name = u'敏感字段'verbose_name_plural = u'敏感字段表'
在这个model所在的app下创建resource.py 文件:
from import_export import resourcesfrom common.models import SensitiveColumnclass SensitiveColumnResource(resources.ModelResource):"""import"""class Meta:model = SensitiveColumnimport_id_fields = ['db', 'table', 'column'] # 这里决定了update_or_create,可以避免重复导入
接着写我们的admin.py文件:
from import_export.admin import ImportExportModelAdminfrom .resource import SensitiveColumnResourcefrom .models import SensitiveColumn@admin.register(SensitiveColumn)class SensitiveColumnsAdmin(ImportExportModelAdmin):resource_class = SensitiveColumnResourcelist_display = ('id', 'db', 'table', 'column', 'comment')
