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

Django使用requests库POST传数组仅收到最后一个值的问题

问题根因

数组值仅保留最后一项的问题,由两个操作错误共同导致:

  • 错误1:直接对Django的QueryDict对象执行json.dumps()序列化。QueryDict是Django专为表单格式请求设计的存储结构,不是原生Python字典,直接序列化时不会保留同key对应的多值列表,只会输出每个key的最后一个值,这是数组值丢失的核心原因。
  • 错误2:参数key名不匹配。发送端的数组key是带方括号后缀的word_id[](这是传统表单传数组的命名约定,JSON格式不需要这种写法),但接收端代码尝试获取的key是不带后缀的word_id,即便序列化正常也无法正确取值。
修正方案

调整发送端逻辑,不要直接序列化QueryDict对象,先手动构造符合JSON格式要求的原生Python字典,多值字段通过getlist()方法取全量值,同时统一参数key名:

def wordgrpocc_ajax(request):
    woccs= []
    postVars= request.POST

    print('postVars= '+str(postVars))
    # 构造标准可序列化字典
    payload = {
        "syear": postVars.get("syear", "0"),
        "eyear": postVars.get("eyear", "0"),
        # 统一key名为word_id,通过getlist取该key下所有值
        "word_id": postVars.getlist("word_id[]", [])
    }

    url = skpsettings.API_URL+"word/group/occurrence"
    headers = {'Content-type': 'application/json'}
    # 序列化构造好的标准字典即可
    bresplist = requests.post(url= url, data=json.dumps(payload), headers=headers)
    woccs= bresplist.text

    return HttpResponse(woccs, content_type="application/json")

修正后接收端无需调整,直接通过postVars.get("word_id")就能拿到完整的3个ID组成的列表。

补充说明:传JSON格式参数时,不需要遵循表单传数组的key[]命名规则,直接给key赋值数组类型即可,多余的方括号后缀反而容易引发key匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:00:59