• 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
  • 相关阅读:
    整合ssm
    卸载,安装JDK
    基本的Dos命令
    基本的Dos命令
    Typora软件操作教程(简单的编写文档,方便,美观,有效的 HTML 文档)
    Vuex 第6节 module模块组
    Vuex 第5节 actions异步修改状态
    Vuex 第4节 getters计算过滤操作
    Vuex 第3节 Mutations修改状态
    Vuex 第2节 state访问状态对象
  • 原文地址:https://www.cnblogs.com/jingzaixin/p/13450788.html
Copyright © 2020-2023  润新知