我正在尝试将所有与业务逻辑相关的验证移动到模型中,而不是将它们留在表单中。但是在这里我遇到了一个棘手的情况,我想咨询 SO 社区。
在我的 SignupForm(模型表单)中,我进行了以下特定于字段的验证,以确保输入的电子邮件不存在。
def clean_email(self):
email = self.cleaned_data['email']
if ExtendedUser.objects.filter(email=email).exists():
raise ValidationError('This email address already exists.')
return email
如果我要将此验证移至模型,根据官方文档,我会将其放入clean()
相应的模型中,ExtendedUser
. 但是文档还提到了以下内容:
由 Model.clean() 引发的任何 ValidationError 异常都将存储在一个特殊的键错误字典键 NON_FIELD_ERRORS 中,该键用于与整个模型而不是特定字段相关的错误
这意味着,clean()
我无法将由此引发的错误与特定字段相关联。我想知道模型是否提供类似于 forms' 的东西clean_<fieldname>()
。如果不是,您会将这个验证逻辑放在哪里,为什么?