目标:
我想覆盖first_name
中的last_name
和AbstractUser model
。
我要什么:
我想创建validator
来说明是否填充了first_name
或last_name
。所以我想用两个参数来适应相同的验证器。如何创建?
答案 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_name
和last_name
,否则会得到ValueError
。
因此,每次将ModelForm
与User
模型结合使用时,都会clean()
被调用。例如。在Django
的{{3}},UserCreationForm
等中