Сериализаторы Django: функция проверки не вызывается

Я пытаюсь переопределить функцию validate(), которая 9X_python-shell будет вызываться serializers.is_valid(), но она не вызывается.

serializer.py

class LoginSerializer(serializers.Serializer): email = serializers.EmailField(max_length=255,required=True) password = serializers.CharField(max_length=128,required=True) def validate(self,data): ''' Check for invalid email. & blank email and password. ''' print 'hey i am in login' if data['email'] is '': raise serializers.ValidationError("Email cannot be empty.") if data['password'] is '': raise serializers.ValidationError("Password cannot be empty.") try: validate_email(data['email']) except ValidationError: raise serializers.ValidationError("The email is not a valid email address.") return data 

views.py

class LoginAPI(APIView): permission_classes = (permissions.AllowAny,) serializer = LoginSerializer def post(self, request): data = self.serializer(data=request.data) if data.is_valid(): #do something else: return Response(data.errors,status=status.HTTP_400_BAD_REQUEST) 

пока 9X_django-rest-framework я вызываю is_valid(), оператор печати внутри функции 9X_python-shell validate() не выполняется. что я делаю не так?

8
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Сериализаторы Django: функция проверки не вызывается

Я думаю, вы не получаете никаких инструкций 9X_python print, потому что функция validate не вызывается.

Если 9X_pythonic в одном из полей есть ошибка, например email, функция 9X_django-rest-framework validate не будет вызываться, но поскольку вы не 9X_py передали raise_exception=True в качестве аргумента в is_valid, вы не 9X_python-interpreter получите этих ошибок и вы предполагаете, что 9X_django-modelform is_valid не запущен.

Вы можете написать метод post следующим 9X_django-modelforms образом:

def post(self, request): serializer = self.serializer(data=request.data) # following will automatically raise an exception if the serialize data is not valid serializer.is_valid(raise_exception=True) # do something if the serializer is valid 

ОБНОВЛЕНИЕ: если вы хотите создать конкретное 9X_py сообщение после проверки различных полей, вы 9X_python-shell можете создать метод validate_ в сериализаторе:

def validate_email(self, value): if value == '': raise serializers.ValidationError("Email cannot be empty.") try: validate_email(value) except ValidationError: raise serializers.ValidationError("The email is not a valid email address.") return value 

11
1

  • Я пробовал использовать `serializer.is_valid (raise_exception = True)`, но не работает, вы правы «Если есть ошибка в одном из полей, например, в электронном ...

Ответ #2

Ответ на вопрос: Сериализаторы Django: функция проверки не вызывается

У меня была такая же ошибка. Попробуйте 9X_django-forms пойти с

def run_validation(self, data): ... 

вместо

def validation(self, data): ... 

это должно сработать!

3
0