我需要在调用update()之前做一些操作。
我的代码
class CarView(generics.UpdateAPIView):
permission_classes = (IsAdminUser,)
serializer_class = CarSerializer
def get_queryset(self):
return ...
def update(self, request, *args, **kwargs):
# some actions
super(CarView, self).update(request, *args, **kwargs)
但我收到了错误
错误消息
预计会有
Response
,HttpResponse
或HttpStreamingResponse
从视图返回,但收到<type 'NoneType'>
我该如何解决?
答案 0 :(得分:3)
与大多数Django视图一样,update
上的ViewSet
方法应该返回响应。现在你没有返回任何东西,这就是为什么Django抱怨接收NoneType
(因为那是默认的返回值)。
问题来自您update
方法的最后一行,您调用的是父update
但尚未将其返回。
super(CarView, self).update(request, *args, **kwargs)
如果你返回它,那么来自通常定义的update
方法的响应将在链中传递并按照你期望的方式呈现。
return super(CarView, self).update(request, *args, **kwargs)
答案 1 :(得分:2)
这种情况正在发生,因为您的update
方法中未返回任何内容。 Django视图期望返回Response
个对象。只需在return
方法中添加update
即可。
class CarView(generics.UpdateAPIView):
permission_classes = (IsAdminUser,)
serializer_class = CarSerializer
def get_queryset(self):
return ...
def update(self, request, *args, **kwargs):
# some actions
return super(CarView, self).update(request, *args, **kwargs)
根据文件,
REST框架通过提供一个支持HTTP内容协商 响应类,允许您返回可以呈现的内容 多种内容类型,具体取决于客户端请求。
Response类是Django的SimpleTemplateResponse的子类。 响应对象使用数据初始化,数据应包含 原生Python原语。然后,REST框架使用标准HTTP 内容协商以确定它应如何呈现最终结果 回应内容。
因此,要将数据呈现为不同的内容类型,您必须返回响应。