Django数据库填充JSON序列化格式转换报错处理求助
问题排查及解决方案
错误原因
你获取的参数d是json.load读取生成的列表结构,每个元素是单条记录的字典。使用for i in d遍历列表时,i本身就是列表内的字典对象,不是列表的整数下标索引,你用d[i]的写法相当于用字典作为列表的索引取值,自然触发TypeError: list indices must be integers or slices, not dict报错,和Django要求的格式无关。
修正代码
推荐直接遍历列表元素重构符合要求的结构,语法更简洁不易出错:
def re_serialize_reg_json(d, output_json_path): formatted_data = [] for item in d: # 构造fields字段内的属性 fields = { "Name": item["Name"], "Distributor": item["Distributor"], "State": item["State"], "Brand": item["Brand"], "Cell": item["Cell"], "EmailAddress": item["email address"], "Notes": item["Notes"] } # 拼接Django要求的序列化结构 formatted_data.append({ "pk": item["pk"], "model": item["model"], "fields": fields }) # 直接写入结果文件,后续可直接用于loaddata import json with open(output_json_path, "w", encoding="utf-8") as f: json.dump(formatted_data, f, ensure_ascii=False, indent=2) return formatted_data
后续操作
生成的格式化JSON文件可直接执行Django命令导入数据库:python manage.py loaddata territorymanagers_formatted.json
内容的提问来源于stack exchange,提问作者Justin Benfit
相关产品推荐
相关产品推荐

