我有一个允许用户注册帐户的API端点.对于重复的用户名,我想返回HTTP 409,而不是400.
以下是我的串行化程序:
from django.contrib.auth.models import User
from rest_framework.serializers import ModelSerializer
class UserSerializer(ModelSerializer):
username = CharField()
def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise NameDuplicationError()
return value
class NameDuplicationError(APIException):
status_code = status.HTTP_409_CONFLICT
default_detail = u'Duplicate Username'
当错误被触发时,响应为:{"detail":"Duplicate Username"}
.我意识到,如果我子类APIException,则使用键detail
而不是username
.
我想要这个回复,而不是{"username":"Duplicate Username"}
或者,我想在引发ValidationError时指定一个状态代码:
def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise serializers.ValidationError('Duplicate Username',
status_code=status.HTTP_409_CONFLICT)
return value
但这不起作用,因为ValidationError
只返回400.
有没有其他方法可以做到这一点呢?