当前位置: 首页 > 知识库问答 >
问题:

Django rest框架:从串行化器验证()方法设置字段级错误

祁嘉木
2023-03-14

我有一个基于其他字段值验证字段的序列化程序,在错误响应中,我希望将每个字段错误显示为字段错误,而不是在“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'

所需的错误响应为:

{'field_val1': ['this field is not valid']}

共有3个答案

戚承业
2023-03-14

如果您有适用于所有字段的逻辑,您仍然可以通过执行以下操作获得所需的结果:

def validate(self, data):
    for key, value in data.items():
        # checks if value is empty
        if not value:
            raise serializers.ValidationError({key: "This field should not be left empty."})

    return data
赵智勇
2023-03-14

类似于@Jkk.jonah的答案,这会引发一个ValidationError,但它会重用原始异常文本,而不需要重新实现翻译:

try:
    serializer.fields['field_val1'].fail('required')
except ValidationError as exc:
    raise ValidationError({
        'field_val1': exc.detail,
    })

默认情况下(即在rest\u framework.fields.Fieldclass上),可用键有:

default_error_messages = {
    'required': _('This field is required.'),
    'null': _('This field may not be null.')
}

子类可以在那里添加它们自己的错误消息(而序列化程序字段的子类)。

顺便说一句,新的错误消息将自动与现有(继承的)消息合并-不会像预期的那样被覆盖。

柳仲卿
2023-03-14

我发现,在“BaseSerializer”部分文档的这一页上,有一个示例显示ValidationError可以在初始化时使用字典参数。

如果我raisevalidationerror({'field_val1':['thisfield is not valid']})我会得到想要的JSON响应。

 类似资料:
  • 我目前正在努力熟悉网页的Spring验证。我在网上看到的大多数例子都展示了如何发送验证错误消息。我很好奇如何设置字段的值作为验证的一部分。 下面是一个更好地解释我自己的例子 想象一下,在一个网页上,有一门课记录了一些人的工资细节 getter和setter示例 人员工资不能低于零,因此如果输入负数,该字段将更新为零。 如何做到这一点? 会在验证课上完成吗? 验证类中的示例部分

  • 本文向大家介绍Laravel框架表单验证格式化输出的方法,包括了Laravel框架表单验证格式化输出的方法的使用技巧和注意事项,需要的朋友参考一下 最近在公司的项目开发中使用到了 laravel 框架,采用的是前后端开发的模式。接触过前后端开发模式的小伙伴应该都知道,后端返回的数据格式需要尽可能搞得保证一致性,这样前端在处理时也方便处理。我们先通过观看下面的两张接口返回的效果图吧,这样或许会更加的

  • 本文向大家介绍ThinkPHP框架表单验证操作方法,包括了ThinkPHP框架表单验证操作方法的使用技巧和注意事项,需要的朋友参考一下 自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证。分为静态验证和动态验证。 一、静态验证 (1)在Home/Controller/路径下新建Index控制器。IndexController  Inde

  • 问题内容: 我曾经遇到过Java的验证框架,您在其中编写了一种方法来保护数据类型的完整性以及对该数据类型的任何CRUD操作的自动调用此方法。 有谁知道这个框架是什么?我只是想避免对附加到数据类型的每个CRUD方法进行重复验证。 问题答案: 这是Java验证库/框架的巨大列表-http: //java-source.net/open- source/validation

  • 主要内容:创建主页面:,创建视图:,创建动作:,配置文件:,此验证是如何工作的?,基于XML的验证:现在,我们将看看如何的Struts验证框架。在Struts的核心有验证框架,协助应用程序的运行规则来执行验证执行之前的操作方法。 通常是使用Javascript来实现客户端验证。但不应单独依赖于客户端验证。最佳实践表明,验证应引入各级应用程序框架。现在,让我们来看看两种方式添加验证我们的Struts项目。 在这里,我们将采取一个例子,Employee 将被捕获的姓名和年龄使用一个简单的页面,我们将

  • 作用 验证给定字符串是否满足指定条件,一般用在表单字段验证里。 此类中全部为静态方法。 使用 判断验证 直接调用Validator.isXXX(String value)既可验证字段,返回是否通过验证。 例如: boolean isEmail = Validator.isEmail("loolly@gmail.com") 表示验证给定字符串是否复合电子邮件格式。 其他验证信息请参阅Validat