首页 > 解决方案 > 如何更改 IPAddressField 错误消息

问题描述

我在用着:

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='Enter a valid IPv4 address.', code='invalid')]}}

标签: pythondjangoserializationdjango-rest-framework

解决方案


如您所见,错误消息非常具体:

'Enter a valid IPv4 address.'

在查看代码时,我在 DRF 中找不到这样的错误消息。这意味着该消息来自 django 验证器,尤其是validate_ipv4_address.

正如您提到的,您正在使用"string"它作为输入来测试它。如果您查看to_internal_valueIPAddressField,您会注意到该值"string"不会在那里引发任何错误。从那里,它进入验证器并生成您看到的消息。

因为,validator是直接提升ValidationError, 没有经过fail序列化器的方法。并且,因此它无法invalid在字段中提供的错误消息中查找键。


推荐阅读