【发布时间】:2012-07-30 05:26:25
【问题描述】:
嗨,这是我的 admin.py 中的一个 sn-p
#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)
我使用它来检查是否无法使用已使用的电子邮件地址创建新用户。问题是,当我编辑现有用户时,验证检查失败,因为有一个用户使用该邮件地址,但没关系,因为它是我正在编辑的那个。
如何告诉表单验证忽略与当前用户的匹配?
【问题讨论】:
-
可能是干净的方法,您可以检查实例 id(我不确定该方法是否可用)。
-
两个问题(与解决方案本身无关): 1. 为什么需要注销(或者是否需要)?和 2. 在这里进行检查而不是在模型中的电子邮件字段中添加 unique=True 是否有优势? (或者也许“与此解决方案相比,使用 unique=True 有缺点吗?”因为这就是我一直在做的事情。)
标签: django validation django-forms django-admin