You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Django API发送嵌套字典时为何被解析为数组?

问题原因

Django测试客户端(self.client)默认会把传入的data参数按照**表单编码格式(application/x-www-form-urlencoded)**发送,这种格式不支持嵌套字典结构。当你传入嵌套字典时,客户端会把内层字典的键(A、B、C)当成外层键test的数组值来序列化,所以后端收到的request.data里test对应的是['A','B','C']。

解决方案1:发送JSON格式数据

手动将嵌套字典序列化为JSON字符串,同时设置请求的content_type为application/json,后端就能正确解析嵌套结构。

修改发送代码:

import json

data = {
    "test":{
        "A":"Adata",
        "B":"Bdata",
        "C":"Cdata"
    }
}       

response = self.client.post(
    "/api_patch/",
    data=json.dumps(data),
    content_type="application/json",
    follow=True
)

此时后端打印的request.data会是正常的嵌套字典:

request.data {'test': {'A': 'Adata', 'B': 'Bdata', 'C': 'Cdata'}}
request.data type <class 'dict'>

解决方案2:使用DRF的APIClient

如果项目依赖Django REST Framework,直接用APIClient替代默认测试客户端,它会自动处理JSON格式的嵌套数据,无需手动序列化。

先导入客户端:

from rest_framework.test import APIClient

修改测试代码:

client = APIClient()
data = {
    "test":{
        "A":"Adata",
        "B":"Bdata",
        "C":"Cdata"
    }
}       
response = client.post("/api_patch/", data, follow=True)

这样后端同样能正确接收嵌套字典结构。

内容的提问来源于stack exchange,提问作者whitebear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:26:01