Как можно изменить сообщение об ошибке IPAddressField - PullRequest
2 голосов
/ 18 марта 2020

Я использую:

djangorestframework==3.11.0
django==3.0.3

Я легко изменил CharField Error_message, но когда я пытаюсь изменить сообщение об ошибке для IPAddressField:

class InterfaceSerializer(serializers.Serializer):
    ip_address = serializers.IPAddressField(protocol="IPv4",
                                        required=False,
                                        allow_blank=True,
                                        error_messages={'invalid': 'test fail'},
                                        )

Результат всегда:

{"error_message": {
"ip_address": [
  "Enter a valid IPv4 address."
]}}

И ответ:

2020-03-18 13: 13: 12,878: ОШИБКА: ответ: {'error_message' : {'ip_address': [ErrorDetail (string = 'Введите действительный адрес IPv4.', code = 'invalid')]}}

1 Ответ

0 голосов
/ 18 марта 2020

Как видите, сообщение об ошибке очень конкретное c:

'Enter a valid IPv4 address.'

Просматривая код, я не смог найти такого сообщения об ошибке в DRF. Это означало, что сообщение приходит от django валидатора и, в частности, validate_ipv4_address.

Как вы упомянули, вы используете "string" в качестве ввода для его проверки. Если вы посмотрите на to_internal_value из IPAddressField, вы заметите, что значение "string" не вызовет там никаких ошибок. Оттуда он идет к валидаторам и выдает сообщение, которое вы видите.

Поскольку validator напрямую вызывает ValidationError, он не go с помощью метода fail сериализатора. , И, следовательно, он не может найти ключ invalid в сообщениях об ошибках, которые были предоставлены в поле.

...