2

嗨,这是我的 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)

我使用它来检查是否无法使用已使用的电子邮件地址创建新用户。问题是,当我编辑现有用户时,验证检查失败,因为有一个用户使用该邮件地址,但这没关系,因为它是我正在编辑的那个。

如何告诉表单验证忽略与当前用户的匹配?

4

2 回答 2

5

从查询中排除当前实例:

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
于 2012-08-01T10:26:06.483 回答
0

unique使用模型字段验证唯一性要好得多。

您可以使用User具有唯一电子邮件约束的自定义模型。

查看此内容以获取有关在您自己的https://stackoverflow.com/a/1560617/527064上实施唯一验证的更多信息

于 2015-08-17T09:00:31.633 回答