我在串行器中编写了一个validate()函数。默认情况下,Serializer Errors返回400作为状态代码。但是我想返回404。我尝试了以下操作:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = models.MyClass
fields = "__all__"
def validate(self, data):
current_user = self.context.get("request").user
user = data.get("user")
if user!=current_user:
raise ValidationError({'detail': 'Not found.'}, code=404)
return data
但是它仍然返回400作为状态码的响应,怎么做呢?
2条答案
按热度按时间t40tm48m1#
这是处理验证错误的Django源代码。
Django会检查ValidationError,然后从错误对象中获取详细信息,并使用状态码400重新创建,这就是代码无法工作的原因。
因此,从视图类中捕获django错误并更改状态代码,如下所示。
txu3uszq2#
您可以通过处理序列化验证从视图中执行此操作:
或者,您也可以通过定义自己的异常处理程序来完成此操作:
但正如您所说,如果您想从序列化器中执行此操作,则必须定义自定义异常并从序列化器中引发它: