参考网址: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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?