Это мой serializers.py (я хочу создать сериалайзер для встроенной модели пользователя):DjangoRestFramework ModelSerializer: проверка на местном уровне не работает
from rest_framework import serializers
from django.contrib.auth.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password', 'email',)
def validate_username(self, username):
if not re.search(r'^\w+$', username): #checks if all the characters in username are in the regex. If they aren't, it returns None
raise serializers.ValidationError('Username can only contain alphanumeric characters and the underscore.')
try:
User.objects.get(username=username)
except ObjectDoesNotExist:
return username
raise serializers.ValidationError('Username is already taken.')
Вопрос в том, когда я пытаюсь создать пользователя с именем пользователя, который уже существует, то она возвращает следующий словарь:
{'username': [u'This field must be unique.']}
, а не говоря
{'username': [u'Username is already taken']}
я воссоздал функцию validate_username для этого (для целей тестирования):
def validate_username(self, username):
raise serializers.ValidationError('Testing to see if an error is raised.')
и не вызывает ошибку. Любая идея, почему DjangoRestFramework игнорирует функцию validate_username?
Редактировать: Обратите внимание, что я использую ModelSerializer (в учебнике здесь: http://www.django-rest-framework.org/api-guide/serializers/#validation он говорит о проверке на уровне поля только для Serializer, а не ModelSerializer). Заметьте, если это имеет значение или нет.
Получается ли оно вызвано надлежащим образом с не буквенно-цифровыми символами? – jvc26
@ jvc26 Нет. Он выдает сообщение об ошибке {'username': [u'Введите действительное имя пользователя. Это значение может содержать только буквы, цифры и символы @ /./+/-/_.]] Большая проблема, которую я вижу здесь, заключается в том, что даже когда я меняю функцию validate_username на "def validate_username (self, username): raise serializers.ValidationError ('Тестирование, чтобы увидеть, если возникла ошибка.') ", ошибка даже не поднимается, поэтому кажется, что Django игнорирует мою функцию validate_username (или она просто не переходит к интерфейсу поднятая ошибка, которая возникает из моей функции validate_username). – user2719875
@ jvc26 Я отредактировал мое сообщение и отметил, что я использую ModelSerializer (а не сериализатор). Не уверен, что это имеет значение или нет. – user2719875