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

Django调用request.data()报'QueryDict' object is not callable如何解决

错误根因与解决方案

1. 报错直接原因

'QueryDict' object is not callable 报错来源于你对request.data的错误调用:Django REST Framework中request.data是封装好的属性,不是可执行方法,你写的request.data()相当于尝试把QueryDict对象当做函数调用,自然抛出该错误。

2. QueryDict转字符串的正确方案

首先修正第一步的错误,把code = request.data()改为code = request.data拿到QueryDict对象,再根据你的业务需求选择转换方式:

  • 如果你是要提取QueryDict中某个参数的字符串值(比如你代码中要用到的code参数),直接取值即可,不用额外转换:
    code = request.data.get("code", "")
    
  • 如果你确实需要把整个QueryDict序列化为JSON字符串,先调用.dict()转为普通Python字典,再用json.dumps(注意不要和写文件的json.dump搞混)处理:
    import json
    code = json.dumps(request.data.dict())
    

3. 修正后完整代码示例

class PreUpdateDeleteAPIView(APIView):
    serializer_class = PreEditSerializer
    queryset = Reserve.objects.all()
    def post(self, request):
        # 按提取单个code参数的场景举例
        code = request.data.get("code", "")
        # 注意返回的字典要加key,不能只放url值
        data = {
            "update_delete_url": reverse('update-delete', args = [code] ,request=request)
        }
        return Response(data)

额外注意点

  • QueryDict本身支持一个参数对应多个值,直接序列化会出现所有参数值被包裹在列表中的情况,必须调用.dict()转为普通单值字典后再序列化才能得到符合预期的结果。
  • 原代码中返回的data字典没有定义key,直接放reverse返回的URL会触发语法错误,上述示例已经补全key可以直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:18:03