Django rest framework как изменить: "Это поле не может быть пустым." сообщение об ошибке

Когда я пытаюсь создать новую модель пользователя, я получаю следующий ответ об ошибке валидации:

HTTP 400 Bad Request
Allow: POST, OPTIONS
Content-Type: application/JSON
Vary: Accept

{
    "phone": [
        "This field may not be blank."
    ],
    "name": [
        "This field may not be blank."
    ]
}

Я хочу узнать, как изменить сообщение об ошибке на пользовательское. Вот мой код пользовательского сериализатора:

from rest_framework import serializers
from django.contrib.auth import get_user_model


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = '__all__'
        read_only_fields = ('last_login',)

Я уже переопределил метод validate, но это не помогло, как и использование этого решения:

extra_kwargs = {"phone": {"error_messages": {"required": "A valid phone number is required"}}}

views.py:

class UserList(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

(Пользовательский пользователь) User.py:

class User(AbstractBaseUser):
    """
    Custom user model based on phone number as the only identifier
    """
    phone = models.CharField(max_length=10, unique=True)
    name = models.CharField(max_length=50, blank=False)
    password = None

    USERNAME_FIELD = 'phone'

    objects = UserManager()

    def __str__(self):
        return self.name

User manager.py:

class UserManager(BaseUserManager):
    """
    Custom user model manager where the phone is the unique identifier
    """

    def create_user(self, phone, name, **extra_fields):
        """
        Create and save a User using the given phone number and country
        """
        if not phone:
            raise ValueError(_('A valid phone must be provided.'))
        if not name:
            raise ValueError(_('Your name is required'))
        user = self.model(phone=phone, name=name, **extra_fields)
        user.set_unusable_password()
        user.save(using=self._db)

    def create_superuser(self, phone, name, **extra_fields):
        """
        Create and save a SuperUser with the given phone and country.
        """
        extra_fields.setdefault('is_verified', True)
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if extra_fields.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(phone, name, **extra_fields)

Я знаю, что это глупая проблема, но я не смог ее решить. Спасибо за вашу ценную помощь.

blank - это ключ для диктанта сообщений об ошибках, который применяется для пустых полей так:

extra_kwargs = {'phone': {'error_messages': {'blank': 'New blank error message'}}}

Вы можете подтвердить пустые поля в вашем views.py файле

def post(self, request):
    phone = request.data.get('phone', False)
    name = request.data.get('name', False)
    serializer = UserSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response({
            'status': True, 
            'message': 'User Register Successfully',
            'data': serializer.data, 

        }, status = status.HTTP_201_CREATED)

    elif phone == '':
        return Response({
        'status': False,
        'message': 'phone field is not defined!',
        }, status = status.HTTP_400_BAD_REQUEST)

    elif name == '':
        return Response({
        'status': False,
        'message': 'name field is not defined!',
        }, status = status.HTTP_400_BAD_REQUEST)

    else :
        return Response({
        'status': False,
        'message': 'Error! Something went wrong!',
        }, status = status.HTTP_400_BAD_REQUEST)
Вернуться на верх