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
相关推荐
小刘同学++3 分钟前
Qt使用 SQLite 数据库的基本方法
数据库·qt·sqlite
YiSLWLL5 分钟前
使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总
python·rust·sqlite·matplotlib·visual studio code
yu4106216 分钟前
Rust 语言使用场景分析
开发语言·后端·rust
细心的莽夫34 分钟前
SpringCloud 微服务复习笔记
java·spring boot·笔记·后端·spring·spring cloud·微服务
花酒锄作田37 分钟前
[flask]自定义请求日志
python·flask
jack_xu2 小时前
高频面试题:如何保证数据库和es数据一致性
后端·mysql·elasticsearch
SsummerC2 小时前
【leetcode100】组合总和Ⅳ
数据结构·python·算法·leetcode·动态规划
pwzs2 小时前
Java 中 String 转 Integer 的方法与底层原理详解
java·后端·基础
Tandy12356_2 小时前
Godot开发2D冒险游戏——第一节:主角登场!
python·游戏引擎·godot