使用pyexcel导入XLSX多工作表至Django关联模型失败求助
解决pyexcel导入Django多关联模型时的工作表匹配错误
这个错误的核心原因是pyexcel的save_book_to_database方法会严格按照Excel工作表的名称与你传入的模型类名进行大小写敏感的匹配,当Excel里的工作表名称和模型类名不一致时,就会抛出这个提示。
快速排查与修复步骤:
检查Excel工作表名称与模型类名的一致性
你的模型类是Supplier和Tax_Vat,请确认Excel文件中的两个工作表名称必须完全对应:- 第一个工作表名称必须是
Supplier(首字母大写,和类名完全一致,不能是supplier、供应商等其他名称) - 第二个工作表名称必须是
Tax_Vat(同样要严格匹配大小写和拼写)
- 第一个工作表名称必须是
如果不想修改Excel工作表名称,手动指定映射关系
如果你希望保留现有Excel的工作表名称,可以在调用save_book_to_database时添加sheet_name_mapping参数,手动将工作表名称映射到对应的模型:request.FILES['myfile'].save_book_to_database( models=[Supplier, Tax_Vat], initializers=[None, tax_func], mapdicts=[ { "Supplier_Number": "Supplier_Number", "Supplier_Name": "Supplier_Name", "Supplier_Contracting_Entity":"Supplier_Contracting_Entity", "Applicable_Brands":"Applicable_Brands", "Currency_To_Be_Paid":"Currency_To_Be_Paid", "Other_Remarks":"Other_Remarks", "Term":"Term", "Notes":"Notes", "Fee_Calculation_Basis":"Fee_Calculation_Basis" }, { "Supplier_Number":"Supplier", "COUNTRY":"COUNTRY", "DEDUCTION_TYPE":"DEDUCTION_TYPE", "NGR_FLAG":"NGR_FLAG", "TAX_VAT_RATE":"TAX_VAT_RATE" } ], # 替换成你实际的Excel工作表名称 sheet_name_mapping={ "Excel中第一个工作表名": Supplier, "Excel中第二个工作表名": Tax_Vat } )验证外键处理逻辑
你的tax_func处理外键的逻辑是可行的,但要确保Excel中Tax_Vat工作表的第一列确实是Supplier_Number,并且models列表的顺序是先Supplier后Tax_Vat(这点你已经做对了,能保证先导入供应商数据,再处理关联的税项数据)。
额外提示
pyexcel的这个匹配逻辑是大小写敏感的,哪怕只差一个字母的大小写都会触发错误,所以一定要仔细核对工作表名称和模型类名的拼写。
内容的提问来源于stack exchange,提问作者manoj remala
相关产品推荐
相关产品推荐

