Python 在模型清理方法中提高场误差
如何在django的modelsPython 在模型清理方法中提高场误差,python,django,django-models,Python,Django,Django Models,如何在django的modelsclean方法中引发字段绑定的ValidationException from django.core.exceptions import ValidationError def clean(self): if self.title: raise ValidationError({'title': 'not ok'}) 上述内容不会将错误添加到标题字段(使用表单时),而是添加到非字段错误(\uuuuuuuuuuuuuuuuuuuuuuu
clean
方法中引发字段绑定的ValidationException
from django.core.exceptions import ValidationError
def clean(self):
if self.title:
raise ValidationError({'title': 'not ok'})
上述内容不会将错误添加到标题
字段(使用表单时),而是添加到非字段错误(\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
)
我知道如何在表单中执行(
self.\u errors['title']=self.error\u class([msg])
),但是self.\u errors
在模型clean
方法中不存在。你不知道,Model
的clean方法只用于引发非字段错误,但是,您可以通过创建clean_title
方法引发字段错误
def clean(self):
"""
Hook for doing any extra model-wide validation after clean() has been
called on every field by self.clean_fields. Any ValidationError raised
by this method will not be associated with a particular field; it will
have a special-case association with the field defined by NON_FIELD_ERRORS.
"""
根据Django文档,使用
这提供了你所要求的一切
便笺上方的框似乎就是您要查找的内容:
raise ValidationError({
'title': ValidationError(_('Missing title.'), code='required'),
'pub_date': ValidationError(_('Invalid date.'), code='invalid'),
})
代码参数是kwarg,因此是可选的。(它在示例中,因此我已将其粘贴在上面)
在你的情况下,我猜你需要这样的东西:
raise ValidationError({
'title': ValidationError('not ok'),
})
是的,我也试过了。但它似乎必须使用验证程序=[clean_title]
连接到字段本身,因此必须在字段之前定义clean_title
(或者必须导入)。不太方便。这个答案应该被接受。但是,您不需要在第二个ValidationError中包装错误消息,一个空字符串可以正常工作。