DRF как добавить к ошибкам проверки поля сериализатора? - PullRequest
1 голос
/ 06 марта 2019

В приведенном ниже примере все поля обязательны для заполнения.Запрос на публикацию с пустым телефоном и несоответствующими паролями приведет к ошибке несоответствия - возможно, потому что телефон приходит позже, когда сортируется по алфавиту.

Как добавить ошибки поля сериализатора вместо их переопределения?

 IN: curl -X POST http://localhost:8000/register/ -d "password=not&password1=matching"

OUT: {"password1":["Passwords do not match."]}

class UserRegistrationSerializer(serializers.ModelSerializer):
    password1 = serializers.CharField(write_only=True)

    class Meta:
        model = User
        fields = ('password', 'password1', 'phone')
        extra_kwargs = {
            'password': {'write_only': True},
            'password1': {'write_only': True},
            'phone': {'required': True},
        }

    def create(self, validated_data):
        del validated_data['password1']
        password = validated_data.pop('password', None)
        instance = self.Meta.model(**validated_data)
        if password:
            instance.set_password(password)
        instance.save()
        return instance

    def validate(self, attrs):
        if attrs.get('password') != attrs.get('password1'):
            raise serializers.ValidationError({'password1': ['Passwords do not match.']})
        return attrs

В идеале запрос curl вывел бы {"password1":["Passwords do not match."],"phone":["This field is required."]}

...