Как вложить ошибки проверки в Django - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь вложить ошибки проверки в один ответ. Как я могу сгруппировать их в поля? Используя этот пример , вместо того, чтобы поднимать каждую ошибку, сгруппируйте все в один ответ. Пример желаемого вывода ниже.

Вот мой пример:

class HighScoreSerializer(serializers.BaseSerializer):
    def to_internal_value(self, data):
        score = data.get('score')
        player_name = data.get('player_name')
        # Perform the data validation.
        if not score:
            raise serializers.ValidationError({
                'score': 'This field is required.'
            })
        if not player_name:
            raise serializers.ValidationError({
                'player_name': 'This field is required.'
            })
        if len(player_name) > 10:
            raise serializers.ValidationError({
                'player_name': 'May not be more than 10 characters.'
            })
        # Return the validated values. This will be available as
        # the `.validated_data` property.
        return {
            'score': int(score),
            'player_name': player_name
        }

Мой желаемый результат:

{'player_name': ['This field is required.', 'May not be more than 10 characters.'], 'score': ['This field is required.']}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020
   raise_error = false
   message={}
   if not score:
        raise_error = true
        message["score"]= []
        message["score"].append('This field is required.')
    if not player_name:
        raise_error = true
        message["player_name"]= []
        message["player_name"].append('This field is required.')
    if len(player_name) > 10:
        if not message["player_name"]:
            message["player_name"]= []
            message["player_name"].append('May not be more than 10 characters.')
        else:
            message["player_name"].append('May not be more than 10 characters.')
    if raise_error:
        raise serializers.ValidationError({
            message
        })
0 голосов
/ 13 февраля 2020

Надеюсь, это будет полезно для вас.

class HighScoreSerializer(serializers.BaseSerializer):
    def to_internal_value(self, data):
        score = data.get('score')
        player_name = data.get('player_name')
        # Perform the data validation.
        error = {}
        error['score'] = []
        error['player_name'] = []
        if not score: 
            error['score'].append('This field is required.')
        if not player_name:
            error['player_name'].append('This field is required.')
        if len(player_name) > 10:
            error['player_name'].append('May not be more than 10 characters.')
        # Return the validated values. This will be available as
        # the `.validated_data` property.
        if len(error):
            raise serializers.ValidationError(error)
        return {
            'score': int(score),
            'player_name': player_name
        }
...