我正在使用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次),我需要自己返回一个响应,但是我仍然想了解为什么它在这里失败了。
答案 0 :(得分:1)
视图应返回HttpResponse。在ViewSet
中,您没有直接实现.get(..)
和.post(..)
,但是它们执行一些处理,并重定向到其他功能,例如.create(..)
和.list(..)
。
这些视图因此应该返回一个HttpResponse
(或“朋友”),在这里您调用super().create(request)
,但是由于{{1 }}版本。
因此,您应该添加一个create(..)
语句,例如:
return