Когда я должен использовать ParseError против ValidationError в Django сериализаторе Rest Framework? - PullRequest
0 голосов
/ 05 февраля 2020

С Django Rest Framework, когда мне нужно поднимать ParseError против serializers.ValidationError при проверке данных формы в сериализаторе?

Мой код выглядит примерно так:

class UserSerializer(serializers.ModelSerializer):
    def create(self, validated_data):
        if  'username' not in validated_data:
            raise ParseError({'username': ['A username is required.']})
        if  'password' not in validated_data:
            raise ParseError({'password': ['A password is required.']})
        if  'email' not in validated_data or len(validated_data['email']) == 0:
            raise ParseError({'email': ['An email is required.']})
        if UserModel.objects.filter(email=validated_data['email']):
            raise ParseError({'email': ['A user with that email already exists.']})

        # ...

Что из этого, если оно есть, должно быть serializers.ValidationError вместо этого? И какое правило я должен следовать в будущем, чтобы определить, какой использовать?

1 Ответ

1 голос
/ 05 февраля 2020

Из DRF сделать c из ParseError

ParseError
Поднимается, если запрос содержит искаженные данные при доступе к request.data.

Обычно это обрабатывается самим DRF. Таким образом, вам не нужно явно поднимать его. В вашем случае все условия находятся в разделе ValidationError . Таким образом, было бы более целесообразным использовать ValidationError вместо ParseError.


ПРИМЕЧАНИЕ: Это настоятельно рекомендуем использовать метод validate(...) для проверки на уровне объекта и validate_<field_name>(...) метод проверка на уровне поля в Django RESTFramework. (Неправильно обрабатывать проверку в create или любых других методах в DRF)

...