Django Rest Framework中的验证代码和消息

时间:2015-01-26 17:49:14

标签: django validation django-rest-framework

使用序列化程序中的开箱即用字段,验证错误消息如下所示:

{
    "product": [
        "This field must be unique."
    ],
    "price": [
        "This field is required."
    ]
}

但是,对于我正在编写的API,我想为每个失败的验证提供唯一的错误代码,以便客户端可以以编程方式响应验证错误,或者可以在UI中提供自己的自定义消息。理想情况下,错误json看起来像这样:

{
    "product": [
        {
          "code": "unique",
          "message": "This field must be unique."
        }
    ],
    "price": [
        { 
          "code": "required",
          "message": "This field is required."
        }
    ]
}

使用ValidationErrors的当前方法使得这相当困难。查看代码,似乎目前不支持此类错误报告。但是,我正在寻找一种方法来覆盖错误处理以适应此模型。

1 个答案:

答案 0 :(得分:1)

将类似内容添加到序列化程序中:

def is_valid(self, raise_exception=False):
    try:
        return super(ClientSerializer, self).is_valid(raise_exception)
    except exceptions.ValidationError as e:
        if 'email' in e.detail:
            for i in range(len(e.detail['email'])):
                if e.detail['email'][i] == UniqueValidator.message:
                    e.detail['email'][i] = {'code': 'not-unique'}
        raise e