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)