【问题标题】:Django ValidationError formating in a For LoopDjango ValidationError 在 For 循环中格式化
【发布时间】:2018-10-21 08:26:30
【问题描述】:

我已经编写了一系列我在 django 模型输入上调用的 RegexValidator 定义。这是一个例子:

def fein_validator(value):
    err = None
    for validator in FEIN_VALIDATOR:
        try:
            validator(value)
            return value
        except ValidationError as exc:
            err = exc
    raise err

此方法的FEIN_VALIDATOR 参考如下。请注意,在这个例子中只有一个项目,我有其他验证器有多个项目(因此for loop):

FEIN_VALIDATOR = [
    RegexValidator(r'^\d{2}-\d{7}$')
    ]

该方法运行良好,并在应有的时候抛出错误。但是,它抛出的错误是Enter a valid value.,我想自定义返回更具体。

我尝试过thisthis 的版本。但这些都假设只有一次通过。我正在尝试使用for loop 运行一系列验证器。

问题 1:我使用的方法构造是否适用于此 - 或者是否应该为每个验证设置单独的方法? [我可以添加自定义消息。]

问题 2:如果这确实有效,如何将引发的错误消息更改为自定义消息?

【问题讨论】:

    标签: python django python-3.x error-handling


    【解决方案1】:

    编辑 1:添加评论

    是的,您的方法非常有效。

    编辑 2:添加自定义错误消息模型链接

    custom error messages with Model Form

      def fein_validator(value):
            err = None
            for validator in FEIN_VALIDATOR:
                try:
                    validator(value)
                    return value
                except ValidationError:
                    raise ValidationError({'field_name': ["error message",]})
    

    【讨论】:

    • 这会抛出TypeError: exceptions must derive from BaseException。我做了更多的搜索,但没有看到为什么会抛出类型错误......?
    • 抛出AttributeError: 'ValidationError' object has no attribute 'error_list'。我发现this 是有道理的,错误是从Model 抛出的,它是通过CreateView 类实例填充的。我试过同时使用NON_FIELD_ERRORS(这是我期望的)和模型字段名称('filed_name')——但它们都抛出了同样的错误。我猜我对模型字段名称的引用是错误的 - field_name 引用具体是什么?
    • 在上面的答案花了更多时间之后,我意识到存在括号格式错误(错误现在已在上面的答案中修复)并且它可以像宣传的那样工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多