Django;使同一验证器具有多个字段

时间:2018-09-12 12:40:02

标签: python django django-models

目标:

我想覆盖first_name中的last_nameAbstractUser model

我要什么:

我想创建validator来说明是否填充了first_namelast_name。所以我想用两个参数来适应相同的验证器。如何创建?

1 个答案:

答案 0 :(得分:0)

您可以覆盖模型的clean()方法。作为参考,通过ORM保存模型实例不会调用模型的clean()方法。

因此,当您继承AbstractUser时:

from django.core.exceptions import ValidationError


class User(AbstractUser):

    def clean(self):
        super().clean()

        if not self.first_name and not self.last_name:
            raise ValidationError({
                'first_name': ValidationError('Please set this', code='error1'),
                'last_name': ValidationError('... or this', code='error2')
            })

请不要忘记按照docs所述配置Django项目。 您还需要确保使用此模型的表单始终实现字段first_namelast_name,否则会得到ValueError

因此,每次将ModelFormUser模型结合使用时,都会clean()被调用。例如。在Django的{​​{3}},UserCreationForm等中