【问题标题】:I am returning a JSON response from this code and I get [ ]我从这段代码返回一个 JSON 响应,我得到 [ ]
【发布时间】:2019-08-29 22:30:17
【问题描述】:

我正在尝试从另一个模型中获取与驱动程序相关的所有模型实例,如图所示循环通过驱动程序查询集,然后以 json 格式全部返回。但我得到了 [ ] 结果。

  elif request.method == "POST":
    pull_tegas_serializer = TegaSerializer(data=request.data)
    if pull_tegas_serializer.is_valid():
        check_for_tegas_request = request.data
        rafiki_number = check_for_tegas_request['rafiki_number']

        def get_rafiki(rafiki_number):
            rafiki_got = RafikiRegistrationCodeModel.objects.filter(phone_number=rafiki_number)
            return rafiki_got.first(), rafiki_got.exists()

        def fetch_rafiki_profile():
            fetched_profile = RafikiProfileModel.objects.filter(rafiki_number=get_rafiki(rafiki_number)[0])
            return fetched_profile.first(), fetched_profile.exists()

        def get_rafiki_driver_session_record():
            rafiki_driver_session_record = RafikiDriverSession.objects.filter(rafiki_number=fetch_rafiki_profile()[0])
            return rafiki_driver_session_record.first(), rafiki_driver_session_record.exists

        rafiki_driver_sessions = RafikiDriverSession.objects.filter(rafiki_number=fetch_rafiki_profile()[0])

        for rafikidriversession in rafiki_driver_sessions:
            fetched_tega = Tega.objects.filter(driver_profile=rafikidriversession.drivers_profile)
            print (rafikidriversession.rafiki_number, rafikidriversession.drivers_profile)
            print (fetched_tega)
            tega_pulled_serializer = TegaSerializer(fetched_tega, many=True)
        return Response(tega_pulled_serializer.data)
    return Response(pull_tegas_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

所以在修改了我的处决之后。我意识到它只返回来自 for 循环执行的最后一个实例的数据,而不是来自 for 循环实例的所有数据。有没有一种方法可以在每次循环完成时保存,然后将这些结果解析为 json 响应?

【问题讨论】:

  • 欢迎来到 Stack Overflow。为了让我们为您提供帮助,请在您的问题中提供 minimal reproducible example 作为文本。此代码示例应包含足够的详细信息,以便我们可以轻松理解您要执行的操作,但不包含任何与您的问题无关的不必要信息。
  • 我希望这个问题现在没问题。感谢 Code-Apprentice @Code-Apprentice
  • 感谢您将代码作为文本而不是屏幕截图的链接发布。但是,代码有几个编译器错误:缩进不正确,有许多未定义的变量和类名,还有一个return 没有一个函数的def
  • 请阅读我第一条评论中的链接。
  • 为什么要在if 块中定义函数?这很不寻常。

标签: python django-rest-framework django-views jsonresponse


【解决方案1】:

您每次都在循环中替换tega_pulled_serializer。它应该是您每次通过循环附加到的列表。

        tega_pulled_serializer = []
        for rafikidriversession in rafiki_driver_sessions:
            fetched_tega = Tega.objects.filter(driver_profile=rafikidriversession.drivers_profile)
            print (rafikidriversession.rafiki_number, rafikidriversession.drivers_profile)
            print (fetched_tega)
            tega_pulled_serializer.append(TegaSerializer(fetched_tega, many=True).data)
        return Response(tega_pulled_serializer)

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2019-09-17
    • 2015-09-07
    相关资源
    最近更新 更多