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('Пользоватль с таким именем уже существует.')
Вернуться на верх