【问题标题】:TypeError: Object of type function is not JSON serializable in djangoTypeError:类型函数的对象在 Django 中不是 JSON 可序列化的
【发布时间】:2022-01-09 22:18:25
【问题描述】:

我正在尝试返回 URL 中给出的字符串,但我收到此错误 TypeError: Object of type function is not JSON serializable 不知道如何纠正此问题。

我正在传递的网址 - http://127.0.0.1:8000/predict/?solute=CC(C)(C)Br&solvent=CC(C)(C)O

我的views.py 文件

@api_view(['GET'])
def result(request):
    response = {}
    solute = request.data.get('solute',None)
    solvent = request.data.get('solvent',None)
    results = [solute,solvent]
    return Response({'result':result}, status=200)
Update: after correcting `result` to `results` it solved my problem

但它在输出中返回 null 响应,而不是通过 URL 获取我输入的 CC(C)(C)BrCC(C)(C)O

【问题讨论】:

  • 这似乎是一个错字。你错过了最后一行的s 字母:{'result':results} 而不是{'result':result}。为您的函数和变量选择更好的名称以避免这些问题。
  • 谢谢,但在更正后我得到 null 作为输出,但我应该得到我在 URL 中给出的内容,对吗? @MojtabaKamyabi
  • @harsh request.data 根据 DRF 文档 (django-rest-framework.org/tutorial/2-requests-and-responses) 适用于“POST”、“PUT”和“PATCH”方法。为什么不为此目的使用动态 url?

标签: python django-rest-framework django-serializer


【解决方案1】:

您似乎将函数 result 本身传递给 Response

【讨论】:

    【解决方案2】:

    看起来您最终将视图函数本身作为上下文字典中的值传递,这可能不是您的意图。您可能希望通过这种方式纠正问题:

    @api_view(['GET'])
    def result(request):
        response = {}
        solute = request.data.get('solute',None)
        solvent = request.data.get('solvent',None)
        results = [solute,solvent]
        return Response({'result':results}, status=200)
    

    请注意,您的视图函数的名称是result,而您打算存储在上下文字典中的值是results

    更新

    关于您的更新,您可以通过以下方式完成:

    @api_view(['GET'])
    def predict(request):
        if request.method == 'GET':
            results = request.GET
            return Response({'result':list(results.values())},status=200)
    

    request.data 方法适用于 post、put 和 patch 方法,而 request.GET 方法返回所有 URL 查询参数的字典

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2019-10-27
      • 2019-11-21
      • 2021-11-13
      • 2018-09-22
      相关资源
      最近更新 更多