本文基于Django自带的admin 后台实现Excel,csv,Json等格式文件的导入并更新后台数据库。
核心是引入 django-import-export模块。
1、测试相数据准备:
我们先创建一个app:app01
python manage.py startapp app01
然后在app01文件夹下的models.py 中写入如下模型数据:
# app01/models.py
class Author(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
class Category(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name
class Book(models.Model):
    name = models.CharField('Book name', max_length=100)
    author = models.ForeignKey(Author, blank=True, null=True,on_delete=models.CASCADE)
    author_email = models.EmailField('Author email', max_length=75, blank=True)
    imported = models.BooleanField(default=False)
    published = models.DateField('Published', blank=True, null=True)
    price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    categories = models.ManyToManyField(Category, blank=True)
    def __str__(self):
        return self.name 
 
2、安装django-import-export
 
指定清华镜像会快很多
pip install django-import-export -i https://pypi.tuna.tsinghua.edu.cn/simple
3、settings.py中修改和添加配置项
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
    'import_export',
]
# django-import-export配置
IMPORT_EXPORT_USE_TRANSACTIONS = True  # 默认值为False。它确定库是否会在数据导入中使用数据库事务,以确保安全。 
修改两处:
- 注册import_export ,app01
 - 添加配置项:IMPORT_EXPORT_USE_TRANSACTIONS = True
 
4、添加admin展示和导出的信息
要最终使用import_export 实现导入导出功能,需要在在admin.py中指定需要导入导出的模型和相关字段信息。
比如:
#app01/admin.py
from import_export import resources
from .models import Book
from import_export.admin import ImportExportModelAdmin
class BookResource(resources.ModelResource):
    class Meta:
        model = Book
class BookAdmin(ImportExportModelAdmin):
    resource_classes = [BookResource]
admin.site.register(Book, BookAdmin) 
以上代码实现了如下:
class BookResource(resources.ModelResource):指定模型导入导出相关字段和方式(这里简单的通过:model = Book,指定了导入导出会涉及所有字段)
class BookAdmin(ImportExportModelAdmin):继承自ImportExportModelAdmin实现admin集成。
admin.site.register(Book, BookAdmin):将模型注册到Django后台。
5、测试演示
admin主页:

Book模型管理页,出现导入导出按钮了。

准备文件,导入数据(文件表头需要按照字段名命名,否则导入数据会无法识别)

6、结语
上文为了快速实现功能,我们把resources和admin类写在了一个文件里面,在实际的项目中,可以将所有的定义Resource的文件,写入到独立的resources.py中,用的时候引入就行了。
class BookResource(resources.ModelResource):
    class Meta:
        model = Book 
                













![[vue3] Tree/TreeSelect树形控件使用](https://img-blog.csdnimg.cn/a13ac3b8954b4f96ab0e405e953f91d3.png)

![[操作系统笔记]处理机调度](https://img-blog.csdnimg.cn/e62e76cdaeda48be8d20ba58ae6a061e.png)


