Валидатор полей Django Serializer не вызывается
Невызов валидатора поля сериализатора кажется распространенной проблемой, но я не могу найти правильное решение. У меня есть обычный (НЕ МОДЕЛЬНЫЙ) сериализатор с полем URLField и пользовательским валидатором для этого поля. Валидатор поля не вызывается при выполнении функции is_valid(), вместо него вызывается встроенный URLValidator.
Вот пользовательский валидатор (только для того, чтобы избежать ошибки http:// not included):
class OptionalSchemeURLValidator(URLValidator):
def __call__(self, value):
if "://" not in value:
value = "http://" + value
super(OptionalSchemeURLValidator, self).__call__(value)
Вот сериализатор:
from rest_framework.serializers import Serializer
class DeveloperAccessTokenSerializer(Serializer):
token = CharField(read_only=True)
company_website = URLField(
required=False,
validators=[OptionalSchemeURLValidator()],
)
def create(self, validated_data):
self.token = jwt.encode(
jwt_payload, settings.SECRET_KEY, algorithm="HS256"
)
self.company_website = validated_data.get("company_website", None)
return self.company_website
Вот как используется сериализатор:
def post(self, request, *args, **kwargs):
context = {"request": request}
ser = self.serializer_class(data=request.data, context=context)
ser.is_valid(raise_exception=True)
token = ser.save()
return Response(token, status=HTTP_201_CREATED)
В функции is_valid() возникает ошибка валидации:
rest_framework.exceptions.ValidationError: {'company_website': [ErrorDetail(string='Введите правильный URL.', code='invalid')]}
.
Входное значение для поля равно