django rest framework:从序列化器validate()方法设置字段级错误

Jkk*_*nah 33 django serializer django-rest-framework

我有一个序列化程序,根据其他字段的值验证字段,在错误响应中,我想将每个字段错误显示为字段错误,而不是显示"non_field_errors"下的所有内容,如果我要提高的话会发生什么对象级验证方法中的ValidationError.下面是我想要实现的目标的说明:

MySerializer(ModelSerializer):
    ...
    def validate(self, data):
        field_val1 = data['field_val1']
        field_val2 = data['field_val2']
        if not self._is_field_valid(field_val1, field_val2):
            # The below line is how I would do what I want with Django
            # Forms, however, it's not valid in DRF
            self._errors['field_val1'] = 'this field is not valid'
Run Code Online (Sandbox Code Playgroud)

所需的错误响应是:

{'field_val1': ['this field is not valid']}
Run Code Online (Sandbox Code Playgroud)

Jkk*_*nah 53

我想通了,在"BaseSerializer"部分的文档的这一页上,有一个示例显示ValidationError可以在初始化时获取字典参数.

如果我raise ValidationError({'field_val1': ['this field is not valid']})得到了我想要的JSON响应.

  • 也适用于模仿"此字段是必需的"响应. (4认同)
  • 非常感谢你.我误解了消息来源,并不认为这会起作用.这正是我所需要的 (3认同)
  • @MarkMishyn不需要,但约定是Django设置的,其后是Rest Framework,用于将字段错误表示为错误列表。但是取决于您的前端/客户端逻辑来实际决定如何支持它们。 (2认同)