Django APITestCase测试POST接口报category字典嵌套数据错误如何解决
问题原因
Django REST Framework 的测试客户端默认使用multipart/form-data格式发送POST请求,这种格式本身不支持嵌套字典、嵌套列表这类复杂结构,你提交的测试数据中category是字典类型、contacts和branches是嵌套字典的列表类型,不符合multipart格式的要求,所以触发报错。
修复方法
仅需要在调用post方法时新增format='json'参数即可,修改后的测试代码如下:
# 仅修改post请求行,其余代码保持不变 self.response = self.client.post(self.course_url, data, format='json')
指定format='json'后,测试客户端会自动将Python字典类型的测试数据序列化为JSON字符串,同时将请求头的Content-Type自动设置为application/json,后端接口即可正常解析嵌套的复杂数据结构。
补充说明
如果你的接口需要同时接收文件上传和复杂嵌套参数,不能直接使用JSON格式,此时需要将嵌套参数手动扁平化处理后再用multipart格式提交,当前场景不需要上传文件,加format='json'即可完全解决问题。
内容的提问来源于stack exchange,提问作者PeakyEye
相关产品推荐
相关产品推荐

