django xadmin 导入功能添加

参考网址:https://www.cnblogs.com/yjlch1016/archive/2019/08/18/11373785.html

     https://www.cnblogs.com/yjlch1016/p/11373785.html

1.安装:pip install django-import-export   #一般已经安装

2.配置settings.py文件,在INSTALLED_APPS中加入'import_export',放在xadmin之后

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'xadmin',  # 注册xadmin
    'crispy_forms',  # 注册xadmin的依赖应用crispy_forms
    'users.apps.UsersConfig',  #注册user
    'testdatas.apps.TestdatasConfig', #注册testdatas
    'reportdatas.apps.ReportdatasConfig', #注册reportdatas
    'testapidatas.apps.TestapidatasConfig',#注册testapidatas
    'reportpageloadtime.apps.ReportpageloadtimeConfig',#注册testapidatas
    'dependallshow.apps.DependallshowConfig',#注册dependallshow
    'testupdatadb.apps.TestupdatadbConfig',#注册testupdatadb
    'shangbaoshuju.apps.ShangbaoshujuConfig', #注册shangbaoshuju
    'spiderdata.apps.SpiderdataConfig',  # 注册spiderdata
    'shucaiyidate.apps.ShucaiyidateConfig',  #注册shucaiyidate
    'debug_toolbar',  # 注册debug_toolbar,放在django.contrib.staticfiles后面
    'import_export',  #导入导出,放在xadmin之后
]

3.配置settings.py文件,加上“IMPORT_EXPORT_USE_TRANSACTIONS = True”一行

IMPORT_EXPORT_USE_TRANSACTIONS = True  # 在导入数据时使用数据库事务,默认False

4.python manage.py collectstatic 收集静态资源,在静态资源目录下会有“import_export”:

STATIC_ROOT = os.path.join(BASE_DIR, 'staticall')  #静态资源目录配置

 5.xadmin注册:先注册VSixXieYiDuiZhaoResources,然后再用

    import_export_args = {
        'import_resource_class': VSixXieYiDuiZhaoResources,
    }# 配置导入按钮

进行使用:

import xadmin
from .modelsv6xieyi import VSixXieYiDuiZhao
#使用import_export 中的resources
from import_export import resources
class VSixXieYiDuiZhaoResources(resources.ModelResource):
    class Meta:
        model = VSixXieYiDuiZhao
        skip_unchanged = True  # 导入数据时,如果该条数据未修改过,则会忽略
        report_skipped = True  # 在导入预览页面中显示跳过的记录
        import_id_fields = ('id',) # 对象标识的默认字段是id,您可以选择在导入时设置哪些字段用作id
        # import_id_fields = ('v6_xiyihao',)  # 对象标识的默认字段是id,您可以选择在导入时设置哪些字段用作id
        fields = (
            'v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei',
            'v6_zhenglihouxieyimingcheng', 'v6_yuanxieyimingcheng',
            'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
            'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao',
            'v6_shifoucaijizhuangtai', 'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing',
            'v6_chengxuleixing', 'v6_kaifaren', 'v6_ceshiren', 'v6_xiugaineirong', 'v6_erjinzhimingcheng',
            'v6_teshupeizhiwenjian', 'v6_guidangshijian', 'v6_guidangren',
        )# 白名单

        exclude = (
            'write_user', 'add_time', 'update_time',
        )# 黑名单


#V6协议对照
class VSixXieYiDuiZhaoXadmin(object):
    all_zi_duan = ["id",
                   "add_time", "update_time"]
    list_display = ['v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei',
                    'v6_zhenglihouxieyimingcheng', 'v6_yuanxieyimingcheng',
                    'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
                    'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao',
                    'v6_shifoucaijizhuangtai', 'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing',
                    'v6_chengxuleixing', 'v6_kaifaren', 'v6_ceshiren', 'v6_xiugaineirong', 'v6_erjinzhimingcheng',
                    'v6_teshupeizhiwenjian', 'v6_guidangshijian', 'v6_guidangren'] # 定义显示的字段

    list_filter = ['v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei', 'v6_zhenglihouxieyimingcheng',
                   'v6_yuanxieyimingcheng', 'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
                   'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao',
                   'v6_shifoucaijizhuangtai', 'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing',
                   'v6_chengxuleixing', 'v6_kaifaren', 'v6_ceshiren', 'v6_xiugaineirong',
                   'v6_erjinzhimingcheng', 'v6_teshupeizhiwenjian', 'v6_guidangshijian', 'v6_guidangren']# 定义筛选的字段
    search_fields = ['v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei', 'v6_zhenglihouxieyimingcheng',
                     'v6_yuanxieyimingcheng', 'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
                     'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao', 'v6_shifoucaijizhuangtai',
                     'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing', 'v6_chengxuleixing', 'v6_kaifaren',
                     'v6_ceshiren', 'v6_xiugaineirong', 'v6_erjinzhimingcheng', 'v6_teshupeizhiwenjian',
                     'v6_guidangshijian', 'v6_guidangren']# 定义搜索字段
    model_icon = "fa fa-file-text"  # 定义图标显示
    ordering = ["-add_time"]  # 添加默认排序规则显示排序,根据添加时间倒序排序
    # readonly_fields = ['write_user','add_time','update_time'] # 设置某些字段为只为可读  #设置了readonly_fields,再设置exclude,exclude对该字段无效,

    # exclude = ['case_step']  # 设置某些字段为不显示,即隐藏  #readonly_fields和exclude设置会有冲突
    # inlines = [TestCaseInline]  # inlines配和TestCaseInline使用,可以直接在项目页面添加测试用例#只能做一层嵌套,不能进行两层嵌套

    list_editable = all_zi_duan  # 可以在列表页对字段进行编辑
    refresh_times = [3, 5]  # 对列表页进行定时刷新,配置了3秒和5秒,可以从中选择一个
    list_per_page = 10  # 每页设置10条数据,默认每页展示100条数据
    # fk_fields = ['test_project_id',]  #设置显示外键字段,未生效
    list_display_links = ["v6_xiyihao", ]  # 设置点击链接进入编辑页面的字段
    # date_hierarchy = 'add_time'   #详细时间分层筛选,未生效
    show_detail_fields = ["v6_xiyihao", ]  # 显示数据详情

    list_export = ('xls',)  # 控制列表页导出数据的可选格式
    show_bookmarks = True  # 控制是否显示书签功能

    # 设置是否加入导入插件
    # import_excel = True  # True表示显示使用插件,False表示不显示使用插件,该import_excel变量会覆盖插件中的变量
    import_export_args = {
        'import_resource_class': VSixXieYiDuiZhaoResources,
        # 'export_resource_class': ProductInfoResource,
    }# 配置导入按钮

xadmin.site.register(VSixXieYiDuiZhao,VSixXieYiDuiZhaoXadmin)   #在xadmin中注册VSixXieYiDuiZhao

 6. 

以上这样有个弊病:

Excel文件列名与导入预览页面列名都是字段英文名称而不是verbose_name中文名称很不方便,并且会报错

7.修改优化后的代码:

app应用为"shucaiyidata",模块名为"VSixXieYiDuiZhao":

import xadmin
from .modelsv6xieyi import VSixXieYiDuiZhao
#使用import_export 中的resources
from import_export import resources  #导入resources
from django.apps import apps   #导入apps
class VSixXieYiDuiZhaoResources(resources.ModelResource):
    def __init__(self):
        super(VSixXieYiDuiZhaoResources, self).__init__()  #自调用
        field_list = apps.get_model('shucaiyidate', 'VSixXieYiDuiZhao')._meta.fields
        # 应用名与模型名
        self.verbose_name_dict = {}
        # 获取所有字段的verbose_name并存放在verbose_name_dict字典里
        for i in field_list:
            self.verbose_name_dict[i.name] = i.verbose_name

    def get_export_fields(self):
        fields = self.get_fields()
        # 默认导入导出field的column_name为字段的名称
        # 这里修改为字段的verbose_name
        for field in fields:
            field_name = self.get_field_name(field)
            if field_name in self.verbose_name_dict.keys():
                field.column_name = self.verbose_name_dict[field_name]
                # 如果设置过verbose_name,则将column_name替换为verbose_name
                # 否则维持原有的字段名
        return fields

    class Meta:
        model = VSixXieYiDuiZhao
        skip_unchanged = True  # 导入数据时,如果该条数据未修改过,则会忽略
        report_skipped = True  # 在导入预览页面中显示跳过的记录
        # import_id_fields = ('id',) # 对象标识的默认字段是id,您可以选择在导入时设置哪些字段用作id
        import_id_fields = ('v6_xiyihao',)  # 对象标识的默认字段是id,您可以选择在导入时设置哪些字段用作id
        fields = (
            'v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei',
            'v6_zhenglihouxieyimingcheng', 'v6_yuanxieyimingcheng',
            'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
            'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao',
            'v6_shifoucaijizhuangtai', 'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing',
            'v6_chengxuleixing', 'v6_kaifaren', 'v6_ceshiren', 'v6_xiugaineirong', 'v6_erjinzhimingcheng',
            'v6_teshupeizhiwenjian', 'v6_guidangshijian', 'v6_guidangren',
        )# 白名单

        exclude = (
            'write_user', 'add_time', 'update_time',
        )# 黑名单


# V6协议对照
class VSixXieYiDuiZhaoXadmin(object):
    all_zi_duan = ["id",
                   "add_time", "update_time"]
    list_display = ['v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei',
                    'v6_zhenglihouxieyimingcheng', 'v6_yuanxieyimingcheng',
                    'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
                    'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao',
                    'v6_shifoucaijizhuangtai', 'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing',
                    'v6_chengxuleixing', 'v6_kaifaren', 'v6_ceshiren', 'v6_xiugaineirong', 'v6_erjinzhimingcheng',
                    'v6_teshupeizhiwenjian', 'v6_guidangshijian', 'v6_guidangren'] # 定义显示的字段

    list_filter = ['v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei', 'v6_zhenglihouxieyimingcheng',
                   'v6_yuanxieyimingcheng', 'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
                   'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao',
                   'v6_shifoucaijizhuangtai', 'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing',
                   'v6_chengxuleixing', 'v6_kaifaren', 'v6_ceshiren', 'v6_xiugaineirong',
                   'v6_erjinzhimingcheng', 'v6_teshupeizhiwenjian', 'v6_guidangshijian', 'v6_guidangren']# 定义筛选的字段
    search_fields = ['v6_xiyihao', 'v6_jianceleixing', 'v6_yiqifenlei', 'v6_zhenglihouxieyimingcheng',
                     'v6_yuanxieyimingcheng', 'v6_syybxydcjyqxh', 'v6_status', 'v6_yuanshucaiyiduiyingxieyihao',
                     'v6_shujuzhiling', 'v6_zhuangtaicanshuzhiling', 'v6_chuchangshengjibao', 'v6_shifoucaijizhuangtai',
                     'v6_yijifenlei', 'v6_shiyongquyu', 'v6_jiekouleixing', 'v6_chengxuleixing', 'v6_kaifaren',
                     'v6_ceshiren', 'v6_xiugaineirong', 'v6_erjinzhimingcheng', 'v6_teshupeizhiwenjian',
                     'v6_guidangshijian', 'v6_guidangren']# 定义搜索字段
    model_icon = "fa fa-file-text"  # 定义图标显示
    ordering = ["-add_time"]  # 添加默认排序规则显示排序,根据添加时间倒序排序
    # readonly_fields = ['write_user','add_time','update_time'] # 设置某些字段为只为可读  #设置了readonly_fields,再设置exclude,exclude对该字段无效,

    # exclude = ['case_step']  # 设置某些字段为不显示,即隐藏  #readonly_fields和exclude设置会有冲突
    # inlines = [TestCaseInline]  # inlines配和TestCaseInline使用,可以直接在项目页面添加测试用例#只能做一层嵌套,不能进行两层嵌套

    list_editable = all_zi_duan  # 可以在列表页对字段进行编辑
    refresh_times = [3, 5]  # 对列表页进行定时刷新,配置了3秒和5秒,可以从中选择一个
    list_per_page = 10  # 每页设置10条数据,默认每页展示100条数据
    # fk_fields = ['test_project_id',]  #设置显示外键字段,未生效
    list_display_links = ["v6_xiyihao", ]  # 设置点击链接进入编辑页面的字段
    # date_hierarchy = 'add_time'   #详细时间分层筛选,未生效
    show_detail_fields = ["v6_xiyihao", ]  # 显示数据详情

    list_export = ('xls',)  # 控制列表页导出数据的可选格式
    show_bookmarks = True  # 控制是否显示书签功能

    # 设置是否加入导入插件
    # import_excel = True  # True表示显示使用插件,False表示不显示使用插件,该import_excel变量会覆盖插件中的变量
    import_export_args = {
        'import_resource_class': VSixXieYiDuiZhaoResources,
        # 'export_resource_class': ProductInfoResource,
    }# 配置导入按钮



    #可以根据是否为超级用户,设置某些字段为可读,即超级管理员可以进行编辑,而普通用户不可以进行编辑的字段设置
    def get_readonly_fields(self):
        fields = []
        if self.request.user.is_superuser:  #
            fields = ['write_user','add_time', 'update_time']
            return fields
        else:
            fields = ['write_user','add_time','update_time']   #例如,用户,超级管理员可以分配用户,而普通不可以编辑用户
            return fields

    def instance_forms(self):  # 需要重写instance_forms方法,此方法作用是生成表单实例
        super().instance_forms()
        # 判断是否为新建操作,新建操作才会设置write_user的默认值
        if not self.org_obj:
            self.form_obj.initial['write_user'] = self.request.user.id

    #post处理导入数据
    def post(self, request, *args, **kwargs):  # 重载post函数,用于判断导入的逻辑
        if 'excel' in request.FILES:  # 如果excel在request.FILES中
            excel_file = request.FILES.get('excel', '')

            import xlrd  # 导入xlrd
            # 常用的Excel文件有.xls和.xls两种,.xls文件读取时需要设置formatting_info = True
            # data = xlrd.open_workbook(filename=None, file_contents=excel_file.read())  # xlsx文件

            exceldata = xlrd.open_workbook(filename=None, file_contents=excel_file.read(),
                                           formatting_info=True)  # xls文件

            from .analyzexls import Analyzexls
            analyzexls = Analyzexls()
            # 将获取的数据循环导入数据库中
            all_list_1 = analyzexls.get_sheets_mg(exceldata, 0)
            i = 0
            if len(all_list_1[0]) >= 23:  #如果大于等于23列
                while i < len(all_list_1):
                    v6_xiyihao = all_list_1[i][0]
                    v6_jianceleixing = all_list_1[i][1]
                    v6_yiqifenlei = all_list_1[i][2]
                    v6_zhenglihouxieyimingcheng = all_list_1[i][3]
                    v6_yuanxieyimingcheng = all_list_1[i][4]
                    v6_syybxydcjyqxh = all_list_1[i][5]
                    v6_status = all_list_1[i][6]
                    v6_yuanshucaiyiduiyingxieyihao = all_list_1[i][7]
                    v6_shujuzhiling = all_list_1[i][8]
                    v6_zhuangtaicanshuzhiling = all_list_1[i][9]
                    v6_chuchangshengjibao = all_list_1[i][10]
                    v6_shifoucaijizhuangtai = all_list_1[i][11]
                    v6_yijifenlei = all_list_1[i][12]
                    v6_shiyongquyu = all_list_1[i][13]
                    v6_jiekouleixing = all_list_1[i][14]
                    v6_chengxuleixing = all_list_1[i][15]
                    v6_kaifaren = all_list_1[i][16]
                    v6_ceshiren = all_list_1[i][17]
                    v6_xiugaineirong = all_list_1[i][18]
                    v6_erjinzhimingcheng = all_list_1[i][19]
                    v6_teshupeizhiwenjian = all_list_1[i][20]
                    v6_guidangshijian = all_list_1[i][21]
                    v6_guidangren = all_list_1[i][22]

                    print("归当时间:")
                    print(v6_guidangshijian)

                    if v6_xiyihao == None:
                        print("表格中第%s行的协议号为空,此行不进行数据录入" % str(i + 2))
                    else:
                        v6_xiyihao = str(v6_xiyihao).strip()
                        if "." in v6_xiyihao:  # 如果点在协议号中说明协议号为数据型存在小数点
                            v6_xiyihao = v6_xiyihao.split(".")[0]
                        else:
                            v6_xiyihao = v6_xiyihao

                        if v6_guidangshijian == None:   #如果归档时间为None,则直接赋值
                            v6_guidangshijian = v6_guidangshijian
                        else:
                            v6_guidangshijian = str(v6_guidangshijian).strip()
                            if "." in v6_guidangshijian:  # 如果点在协议号中说明协议号为数据型存在小数点
                                v6_guidangshijian = v6_guidangshijian.split(".")[0]
                                v6_guidangshijian_len = len(v6_guidangshijian)
                                if v6_guidangshijian_len ==5:  #5位数字时间戳
                                    v6_guidangshijian = analyzexls.get_data_from_excel_riqi_wenben(v6_guidangshijian)
                                else:
                                    v6_guidangshijian = v6_guidangshijian
                            else:
                                v6_guidangshijian = v6_guidangshijian

                        if  v6_yuanshucaiyiduiyingxieyihao == None: #如果为None,直接赋值
                            v6_yuanshucaiyiduiyingxieyihao = v6_yuanshucaiyiduiyingxieyihao
                        else:
                            v6_yuanshucaiyiduiyingxieyihao = str(v6_yuanshucaiyiduiyingxieyihao).strip()
                            if "." in v6_yuanshucaiyiduiyingxieyihao:  # 如果点在协议号中说明协议号为数据型存在小数点
                                v6_yuanshucaiyiduiyingxieyihao = v6_yuanshucaiyiduiyingxieyihao.split(".")[0]
                            else:
                                v6_yuanshucaiyiduiyingxieyihao = v6_yuanshucaiyiduiyingxieyihao

                        old_vsixxieyiduizhao_count = VSixXieYiDuiZhao.objects.filter(v6_xiyihao=v6_xiyihao).
                            filter(v6_jianceleixing=v6_jianceleixing).filter(v6_yiqifenlei=v6_yiqifenlei).
                            filter(v6_zhenglihouxieyimingcheng=v6_zhenglihouxieyimingcheng).filter(v6_yuanxieyimingcheng=v6_yuanxieyimingcheng).
                            filter(v6_syybxydcjyqxh=v6_syybxydcjyqxh).filter(v6_status=v6_status).
                            filter(v6_yuanshucaiyiduiyingxieyihao=v6_yuanshucaiyiduiyingxieyihao).filter(v6_shujuzhiling=v6_shujuzhiling).
                            filter(v6_zhuangtaicanshuzhiling=v6_zhuangtaicanshuzhiling).filter(v6_chuchangshengjibao=v6_chuchangshengjibao).
                            filter(v6_shifoucaijizhuangtai=v6_shifoucaijizhuangtai).filter(v6_yijifenlei=v6_yijifenlei).
                            filter(v6_shiyongquyu=v6_shiyongquyu).filter(v6_jiekouleixing=v6_jiekouleixing).
                            filter(v6_chengxuleixing=v6_chengxuleixing).filter(v6_kaifaren=v6_kaifaren).
                            filter(v6_ceshiren=v6_ceshiren).filter(v6_xiugaineirong=v6_xiugaineirong).
                            filter(v6_erjinzhimingcheng=v6_erjinzhimingcheng).filter(v6_teshupeizhiwenjian=v6_teshupeizhiwenjian).
                            filter(v6_guidangshijian=v6_guidangshijian).filter(v6_guidangren=v6_guidangren).count()
                        if old_vsixxieyiduizhao_count == 0:  #如果不存在则可能进行导入
                            #只进行因子判断
                            yingzi_vsixxieyiduizhao_count = VSixXieYiDuiZhao.objects.filter(v6_xiyihao=v6_xiyihao).count()
                            if yingzi_vsixxieyiduizhao_count>=1:  #如果大于等于1,则只修改第一条数据
                                vsixxieyiduizhao = VSixXieYiDuiZhao.objects.filter(v6_xiyihao=v6_xiyihao).first()
                                vsixxieyiduizhao.v6_xiyihao = v6_xiyihao
                                vsixxieyiduizhao.v6_jianceleixing = v6_jianceleixing
                                vsixxieyiduizhao.v6_yiqifenlei = v6_yiqifenlei
                                vsixxieyiduizhao.v6_zhenglihouxieyimingcheng = v6_zhenglihouxieyimingcheng
                                vsixxieyiduizhao.v6_yuanxieyimingcheng = v6_yuanxieyimingcheng
                                vsixxieyiduizhao.v6_syybxydcjyqxh = v6_syybxydcjyqxh
                                vsixxieyiduizhao.v6_status = v6_status
                                vsixxieyiduizhao.v6_yuanshucaiyiduiyingxieyihao = v6_yuanshucaiyiduiyingxieyihao
                                vsixxieyiduizhao.v6_shujuzhiling = v6_shujuzhiling
                                vsixxieyiduizhao.v6_zhuangtaicanshuzhiling = v6_zhuangtaicanshuzhiling
                                vsixxieyiduizhao.v6_chuchangshengjibao = v6_chuchangshengjibao
                                vsixxieyiduizhao.v6_shifoucaijizhuangtai = v6_shifoucaijizhuangtai
                                vsixxieyiduizhao.v6_yijifenlei = v6_yijifenlei
                                vsixxieyiduizhao.v6_shiyongquyu = v6_shiyongquyu
                                vsixxieyiduizhao.v6_jiekouleixing = v6_jiekouleixing
                                vsixxieyiduizhao.v6_chengxuleixing = v6_chengxuleixing
                                vsixxieyiduizhao.v6_kaifaren = v6_kaifaren
                                vsixxieyiduizhao.v6_ceshiren = v6_ceshiren
                                vsixxieyiduizhao.v6_xiugaineirong = v6_xiugaineirong
                                vsixxieyiduizhao.v6_erjinzhimingcheng = v6_erjinzhimingcheng
                                vsixxieyiduizhao.v6_teshupeizhiwenjian = v6_teshupeizhiwenjian
                                vsixxieyiduizhao.v6_guidangshijian = v6_guidangshijian
                                vsixxieyiduizhao.v6_guidangren = v6_guidangren
                                # vsixxieyiduizhao.write_user_id = request.user.id
                                vsixxieyiduizhao.save()  # 保存到数据库
                                print("修改ID为%s(表格为%s行),协议号为%s的数据"% (str(vsixxieyiduizhao.id),str(i + 2),str(vsixxieyiduizhao.v6_xiyihao)))

                            else:
                                print("录入表格第%s行的协议号为%s的数据" % (str(i + 2),v6_xiyihao))
                                vsixxieyiduizhao = VSixXieYiDuiZhao()  # 数据库的对象等于ClickAndBack,实例化
                                vsixxieyiduizhao.v6_xiyihao = v6_xiyihao
                                vsixxieyiduizhao.v6_jianceleixing = v6_jianceleixing
                                vsixxieyiduizhao.v6_yiqifenlei = v6_yiqifenlei
                                vsixxieyiduizhao.v6_zhenglihouxieyimingcheng = v6_zhenglihouxieyimingcheng
                                vsixxieyiduizhao.v6_yuanxieyimingcheng = v6_yuanxieyimingcheng
                                vsixxieyiduizhao.v6_syybxydcjyqxh = v6_syybxydcjyqxh
                                vsixxieyiduizhao.v6_status = v6_status
                                vsixxieyiduizhao.v6_yuanshucaiyiduiyingxieyihao = v6_yuanshucaiyiduiyingxieyihao
                                vsixxieyiduizhao.v6_shujuzhiling = v6_shujuzhiling
                                vsixxieyiduizhao.v6_zhuangtaicanshuzhiling = v6_zhuangtaicanshuzhiling
                                vsixxieyiduizhao.v6_chuchangshengjibao = v6_chuchangshengjibao
                                vsixxieyiduizhao.v6_shifoucaijizhuangtai = v6_shifoucaijizhuangtai
                                vsixxieyiduizhao.v6_yijifenlei = v6_yijifenlei
                                vsixxieyiduizhao.v6_shiyongquyu = v6_shiyongquyu
                                vsixxieyiduizhao.v6_jiekouleixing = v6_jiekouleixing
                                vsixxieyiduizhao.v6_chengxuleixing = v6_chengxuleixing
                                vsixxieyiduizhao.v6_kaifaren = v6_kaifaren
                                vsixxieyiduizhao.v6_ceshiren = v6_ceshiren
                                vsixxieyiduizhao.v6_xiugaineirong = v6_xiugaineirong
                                vsixxieyiduizhao.v6_erjinzhimingcheng = v6_erjinzhimingcheng
                                vsixxieyiduizhao.v6_teshupeizhiwenjian = v6_teshupeizhiwenjian
                                vsixxieyiduizhao.v6_guidangshijian = v6_guidangshijian
                                vsixxieyiduizhao.v6_guidangren = v6_guidangren
                                # vsixxieyiduizhao.write_user_id = request.user.id
                                vsixxieyiduizhao.save()  # 保存到数据库
                        else:
                            print("表格中第%s行的协议号为%s的数据已经存在,不进行数据录入" % ((i + 2),v6_xiyihao))
                    i = i + 1

        return super(VSixXieYiDuiZhaoXadmin,self).post(request,*args,**kwargs)  # 必须调用VSixXieYiDuiZhaoXadmin父类,再调用post方法,否则会报错
        # 一定不要忘记,否则整个ClickAndBackXAdmin保存都会出错

xadmin.site.register(VSixXieYiDuiZhao,VSixXieYiDuiZhaoXadmin)   #在xadmin中注册VSixXieYiDuiZhao
原文地址:https://www.cnblogs.com/jingzaixin/p/13450788.html