首页 > 解决方案 > 姜戈;使用具有多个字段的相同验证器

问题描述

客观的 :

我想覆盖first_namelast_name来自AbstractUser model.

我到底想要什么:

我想创建validator一个告诉是否填充first_namelast_name填充的内容。所以我想用这两个参数调整同一个验证器。我该如何创作?

标签: pythondjangodjango-models

解决方案


您可以覆盖模型的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')
            })

不要忘记按照文档Django中的说明配置您的项目。您还需要确保使用此模型的表单始终实现字段和,否则您将获得.first_namelast_nameValueError

因此,每次您将 aModelForm与您的User模型结合使用时,clean()都会被调用。例如 in Django,UserChangeFormUserCreationForm


推荐阅读