Django: Как переопределить сообщение об ошибке при входе в систему?
У меня есть пользовательский класс модели пользователя
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
CustomUser(AbstractBaseUser, PermissionsMixin)
...
И связанный вид
class CustomUserViewSet(viewsets.ModelViewSet):
pagination_class = BasePagination
queryset = CustomUser.objects.all()
...
def create(self, request, *args, **kwargs):
serializer = CustomUserSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
if user:
json = serializer.data
send_invitation_email(
user=user,
email=json["email"],
password=request.data["password"],
phone=json["phone_number"]
)
create_chats(user)
return Response(json, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
В случае дублирования электронной почты, имени пользователя я имею следующее сообщение об ошибке:
{"user_name":["custom user with this user name already exists."]}
Как я могу переопределить это сообщение об ошибке с моим пользовательским сообщением:
{"user_name":["A user with this name already exists."]}
Вы можете переопределить сообщения об ошибках по умолчанию в ваших сериализаторах, предоставив некоторые extra_kwargs
или даже добавив пользовательское сообщение об ошибке в поле вашего сериализатора.
# by using extra_kwargs
class CustomUserSerializer(serializers.ModelSerializer):
# ...
class Meta:
model = CustomUser # your custom user model
fields = '__all__' # your fields here
extra_kwargs = {
"user_name": {
"error_messages": {"unique": "Пользоватль с таким именем уже существует."}
},
# you can do this same for your email field
"email": {
"error_messages": {"unique": "Your custom email unique message here. "}
}
}
Вот добавление пользовательского сообщения в поле в явном виде.
class CustomUserSerializer(serializers.ModelSerializer):
user_name = serializers.CharField(
error_messages={"unique": "Пользоватль с таким именем уже существует."}
)
email = serializers.EmailField(
error_messages={"unique": "Your custom email unique message here. "}
)
# ...
Но я лично предпочитаю настраивать сообщение об ошибке с помощью первого метода, предоставляя дополнительные_kwargs.
Вы можете добавить свое сообщение в валидатор в serialzier следующим образом
поэтому в CustomUserSerializer
поместите этот код :
def validate_username(self,value):
if your_logic:
return value
raise serializers.ValidationError('Пользоватль с таким именем уже существует.')