django建站过程(5)添加导入导出功能

django建站过程(5)添加导入导出功能

后端添加导入导出功能

django-import-export

参考官方:

Installation and configuration --- django-import-export 3.3.4.dev0 documentation

安装命令

复制代码
pip install django-import-export

settings.py添加到INSTALLED_APPS

python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'baseapps.apps.BaseappsConfig',     #或者使用 baseapps
    'mdeditor',
    'import_export',	#加入应用

]

创建一个resource.py

在app所在目录下创建resource.py,代码定义两个类

python 复制代码
from import_export import resources
from baseapps.models import topic,documentes

class topicResource(resources.ModelResource):
    
    class Meta:
        model = topic

class documentesResource(resources.ModelResource):

    class Meta:
        model = documentes

配置Admin

修改admin.py,修改的地方就是把我们定义的Admin类原本继承的admin.ModelAdmin改成ImportExportModelAdmin

python 复制代码
from django.contrib import admin
from baseapps.resource import topicResource,documentesResource      #添加resource.py中的类
from baseapps.models import topic,documentes
from import_export.admin import ImportExportModelAdmin              #导入导出功能
# Register your models here.

class topicAdmin(ImportExportModelAdmin):       # ExportMixin导出,ImportMixin导入,ImportExportModelAdmin导入导出
    resource_class = topicResource              # 引入设定的导出字段,现在是全部
admin.site.register(topic,topicAdmin)

# class docAdmin(admin.ModelAdmin):
class docAdmin(ImportExportModelAdmin):         # ExportMixin导出,ImportMixin导入,ImportExportModelAdmin导入导出
    list_display = ('title','author','date_added','topic')     # ModelAdmin列表页展示的字段名
    search_fields = ('title','author',)      #添加"标题"查询
    list_filter = ('topic',)  # 直接激活过滤器
    resource_class =documentesResource          ## 引入设定的导出字段

admin.site.register(documentes,docAdmin)   # docAdmin只有注册后才能使用

定义导入导出的字段

export_order是导出的字段顺序,fields是定义字段导入(注意字段是否能为空)

python 复制代码
class documentesResource(resources.ModelResource):

    class Meta:
        model = documentes
        fields = ('id', 'topic', 'title', 'date_added','text',)     #定义需要导入哪些字段
        
        export_order = ('id', 'title','topic',  'date_added','text',)   #定义导出的字段顺序
        

其他

python 复制代码
exclude = ['id']											#导入时排除id主键
import_id_fields = ['id']			#定义主键id,这样在id同样的情况下就是更新而不是增加新记录了
id = Field(attribute='id', column_name='编号')		#定义导出时列名为中文'编号'
name = Field(attribute='title', column_name='书籍名称')		
# 定义导出时列名为中文'标题',也可以用column_name=documentes.title.field.verbose_name
相关推荐
我不会写代码njdjnssj9 分钟前
基于SpringBoot+SSM的外卖平台Day1-6
java·spring boot·后端
沃斯堡&蓝鸟10 分钟前
DAY34 文件的规范拆分和写法
开发语言·python
ss27310 分钟前
final关键字如何创造线程安全的对象
开发语言·python
大得36911 分钟前
gpt-oss:20b大模型知识库,ai大模型
人工智能·python·gpt
2401_8414956411 分钟前
【机器学习】生成对抗网络(GAN)
人工智能·python·深度学习·神经网络·算法·机器学习·生成对抗网络
清水白石00816 分钟前
构建高性能异步 HTTP 客户端:aiohttp 与 httpx 实战解析与性能优化
python·http·性能优化·httpx
古城小栈19 分钟前
Rust 模块管理与文件联动
开发语言·后端·rust
会算数的⑨27 分钟前
Java场景化面经分享(一)—— JVM有关
java·开发语言·jvm·后端·面试
lpfasd12328 分钟前
Spring Boot 4.0 新特性全解析 + 实操指南
java·spring boot·后端
38242782735 分钟前
Edge开发者工具:保留日志与禁用缓存详解
java·前端·javascript·python·selenium