Django rest框架-API视图抱怨无类型响应

时间:2018-10-18 12:02:35

标签: python django django-rest-framework

我正在使用ModelViewSet从POST请求中接收的参数创建对象。序列化器如下所示:

class FooSerializer(ModelSerializer):
    class Meta:
        model = Foo
        fields = '__all__'

我想拦截请求,并在允许创建继续之前对它执行检查(如果有关系,请使用模型的方法)。在普通django表单中,我将覆盖form_valid方法,进行检查,然后调用super()。form_valid(...)。我想在这里做同样的事情:

class BookingView(ModelViewSet):
    queryset = DirectBooking.objects.all()
    serializer_class = DirectBookingSerializer

    def create(self, request):
        print(request.data)
        #Perform check here
        super().create(request)

从某种意义上说,它可以在数据库中创建一个对象,但是跟踪显示错误:

AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`

这似乎很奇怪,因为我希望super()。save返回适当的响应。

我知道如果检查失败(可能是400次),我需要自己返回一个响应,但是我仍然想了解为什么它在这里失败了。

1 个答案:

答案 0 :(得分:1)

视图应返回HttpResponse。在ViewSet中,您没有直接实现.get(..).post(..),但是它们执行一些处理,并重定向到其他功能,例如.create(..).list(..)

这些视图因此应该返回一个HttpResponse(或“朋友”),在这里您调用super().create(request),但是由于{{1 }}版本。

因此,您应该添加一个create(..)语句,例如:

return