在模型清洁方法中引发字段错误

时间:2013-05-19 10:47:04

标签: python django django-models

如何在django的模型ValidationException方法中引发字段绑定clean

from django.core.exceptions import ValidationError

def clean(self):
    if self.title:
        raise ValidationError({'title': 'not ok'})

以上内容不会将错误添加到title字段(使用表单时),而是添加到非字段错误(__all__)。

我知道如何在表单(self._errors['title'] = self.error_class([msg]))中执行此操作,但模型self._errors方法中不存在clean

2 个答案:

答案 0 :(得分:4)

根据Django文档,这可以使用 model.clean()

这提供了你要求的一切!

笔记上方的框似乎是您要找的内容:

raise ValidationError({
    'title': ValidationError(_('Missing title.'), code='required'),
    'pub_date': ValidationError(_('Invalid date.'), code='invalid'),
})

代码参数是kwarg,因此是可选的。 (它在示例中,所以我已将其粘贴)

在你的情况下,我猜你需要这样的东西:

raise ValidationError({
    'title': ValidationError('not ok'),
})

答案 1 :(得分:3)

您没有,Model的干净方法仅用于提升non field errors,但您可以通过创建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.
    """