Я проверяю данные из запроса в структуре отдыха django с проверкой данных в сериализаторе.Мне нужно, чтобы все сообщения об ошибках отправлялись в одном ответе.
При отправке слишком длинной строки я получаю сообщение об ошибке:
django.db.utils.DataError: value too long for type character varying(3)
В моей модели я определилмаксимальная длина символьного поля равна 3 (теоретически макс. необходимо).
Я добавил проверку в сериализаторе для перехвата запросов с слишком большим количеством символов:
validators.py
class CustomUserValidators():
errors_to_return = {}
def val_role(self, role):
if len(role) > 3:
self.errors_to_return["role_length"] = "Ensure this field has no more than 3 characters."
serializers.py
from Sea.validators import CustomUserValidators
class LagoonUserCreateSerializer(UserCreateSerializer, CustomUserValidators):
class Meta:
model = User
fields = ('id', 'username', 'role',)
def validate(self, attrs):
self.val_role(attrs['role'])
if len(self.errors_to_return) > 0:
raise serializers.ValidationError(self.errors_to_return)
return attrs
models.py
class SeaUser(AbstractUser):
...
role = models.CharField(_('Role'), max_length=3)
Но запрос по-прежнему возвращает ошибку (value too long...
, как указано выше).Я ожидал, что erorr будет обнаружен в сериализаторе, а значения не переданы в модель. Почему значение достигает модели?
Я исследовал это, и все решения говорятсделайте длину поля 255. Это не отвечает, почему значение когда-либо тестируется моделью, и не объясняет, что произошло, если в запросе окажется значение, превышающее ожидаемое.
Любая помощь с этим приветствуется.