【发布时间】:2020-06-01 05:33:57
【问题描述】:
我正在使用带有配置文件的 django 用户模型来扩展用户的更多属性。我需要确保 User 表中用户的电子邮件 ID 唯一。
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.admin import UserAdmin
class UserForm(UserAdmin):
class Meta:
model = User
fields = "__all__"
readonly_fields = ('date_joined',)
def clean_email(self):
email = self.cleaned_data.get('email')
if email and User.objects.filter(email=email).exists():
raise forms.ValidationError(u'Email addresses must be unique.')
return email
此验证消息不会显示在用户表单中。
自定义用户admin定义为
class CustomUserAdmin(UserAdmin):
def save(UserForm, commit=True):
return super(UserForm, self).save(commit=False)
if User.objects.filter(email=email).exists():
raise forms.ValidationError(_("Email already exists ya"),
code='invalid')
inlines = (ProfileInline, )
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
在调试模式下的回溯中可以看到此验证消息,而不是在用户窗体中。
要求消息在用户窗体中显示错误。我知道有两种形式,即。 django auth 中的 UserCreationForm、UserChangeForm。
使用 django 3.0、python 3.7
【问题讨论】: