嗨这是我的admin.py
的片段#admin.py
class UserForm(forms.ModelForm):
class Meta:
model = User
def clean_email(self):
email = self.cleaned_data['email']
if User.objects.filter(email=email).exists():
raise forms.ValidationError("This email already used")
return email
class UserAdmin(admin.ModelAdmin):
form = UserForm
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
我用它来检查是否无法使用已使用的电子邮件地址创建新用户。问题是,当我编辑现有用户时,验证检查失败,因为有一个用户使用该邮件地址,但这没关系,因为它是我正在编辑的那个。
如何告知表单验证忽略与当前用户的匹配?
答案 0 :(得分:4)
从查询中排除当前实例:
def clean_email(self):
email = self.cleaned_data['email']
if User.objects.filter(email=email).exclude(pk=self.instance.pk).exists():
raise forms.ValidationError("This email already used")
return email
答案 1 :(得分:0)
使用unique
在模型字段上验证唯一性会更好。
您可以将自定义User
模型与唯一的电子邮件约束一起使用。
请查看此处,了解有关在您自己的https://stackoverflow.com/a/1560617/527064
上实施唯一验证的详情