gpt4 book ai didi

python - Django Rest 框架 - API View 提示 NoneType 响应

转载 作者:行者123 更新时间:2023-12-01 08:54:24 26 4
gpt4 key购买 nike

我正在使用 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),我需要自己返回响应,但我仍然想了解为什么它在这里失败。

最佳答案

View 应该返回 HttpResponse。在 ViewSet 中,您不直接实现 .get(..).post(..),但它们会执行一些处理,并重定向到其他函数,例如 .create(..).list(..)

因此,这些 View 应该返回一个 HttpResponse (或“ friend ”),在这里您调用 super().create(request),但您忘记返回此调用的响应是您的 create(..) 版本的结果。

因此,您应该添加一个 return 语句,例如:

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

def create(self, request):
print(request.data)
#Perform check here
<b>return</b> super().create(request)

关于python - Django Rest 框架 - API View 提示 NoneType 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com