Python Django ValidationError在For循环中格式化
我已经编写了一系列对django模型输入调用的RegexValidator定义。以下是一个例子:Python Django ValidationError在For循环中格式化,python,django,python-3.x,error-handling,Python,Django,Python 3.x,Error Handling,我已经编写了一系列对django模型输入调用的RegexValidator定义。以下是一个例子: def fein_validator(value): err = None for validator in FEIN_VALIDATOR: try: validator(value) return value except ValidationError as exc: err
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_验证器如下所示,以供参考。请注意,在本例中只有一个项目,我有其他具有多个项目的验证器(因此循环的):
该方法工作得很好,并在应该的时候抛出一个错误。但是,它抛出的错误是输入一个有效的值。
,我想定制更具体的返回
我试过和的版本。但这些都假设只有一个通行证。我正在尝试使用for循环
运行一系列验证程序
问题1:我正在使用的方法构造对此有效吗?还是应该为每个验证使用单独的方法?[由此我可以添加自定义消息。]
问题2:如果这样做有效,如何将引发的错误消息更改为自定义消息?编辑1:添加注释
是的,你的方法很好用
编辑2:添加自定义错误消息模型链接
这会抛出TypeError:异常必须派生自BaseException
。我做了更多的搜索,但不明白为什么会抛出类型错误?抛出属性错误:“ValidationError”对象没有属性“error\u list”
。我发现这是有道理的,错误是从通过CreateView
类实例填充的模型中抛出的。我尝试过使用非字段错误
(这是我期望的工作)和模型字段名(“字段名”
),但它们都抛出相同的错误。我猜我对模型字段名的引用是错误的-字段名的引用具体是什么?在花了更多的时间回答上面的答案后,我意识到有一个括号格式错误(错误现在已在上面的答案中修复),它的工作原理与广告一样。谢谢
FEIN_VALIDATOR = [
RegexValidator(r'^\d{2}-\d{7}$')
]
def fein_validator(value):
err = None
for validator in FEIN_VALIDATOR:
try:
validator(value)
return value
except ValidationError:
raise ValidationError({'field_name': ["error message",]})