【问题标题】:The response content must be rendered before it can be iterated over必须先呈现响应内容,然后才能对其进行迭代
【发布时间】:2014-08-08 02:29:54
【问题描述】:

我有以下views.py

class FilterView(generics.ListAPIView):
    model = cds_composite_csv
    serializer_class = cds_compositeSerializer

def get_queryset(self):
    filename = self.request.GET.get('filename')
    model = get_model('markit', 'cds_composite_csv')
    filedate = self.request.GET.get('filedate')
    if UserFile.objects.filter(user=self.request.user, file__filename=filename).exists():
        queryset = model.objects.using('markitdb').filter(Date__contains=filedate)
        return queryset
    else:
        content = {
            'status': 'Request Failed.'
        }
        return Response(content)

我理解它失败的原因是因为 else 以及它试图从类视图中使用序列化程序的事实。如果满足 else 子句,如何让它忽略序列化程序?

【问题讨论】:

  • 它失败的原因是get_queryset方法应该总是返回一个查询集,而不应该返回一个http响应。

标签: python django django-rest-framework


【解决方案1】:

你真的想明确返回'status':'Request Failed'吗? 我宁愿将raise Http404 放在else 块中并删除其他所有内容。 如果我应该编写一个客户端来使用你的 API,我首先会检查我是否得到状态​​码 200,然后再继续。在这里我会得到“HTTP 200 OK”,但不是预期的结果。

以上只是一种可能的解决方案,您也可以尝试使用除此之外的其他方法,但我当然建议不要自定义Request failed。这只是我的意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2019-11-23
    • 2014-01-03
    • 1970-01-01
    • 2019-12-28
    • 2021-03-15
    • 2018-02-20
    • 2015-12-13
    相关资源
    最近更新 更多