我使用Django 1.3/Python 2.7。保持User.email獨一無二Django Admin
我的應用程序使用django.contrib.auth進行用戶管理。對於主用戶註冊,我有一個表格來檢查「電子郵件」是否已經註冊。所以它確保所有電子郵件字段都是唯一的。
但它發生了一些管理員使用django管理界面添加用戶,並最終使用相同的電子郵件添加重複的帳戶。
爲此,我創建了一個NewUserCreationForm,其中我複製了django.contrib.auth.UserCreationForm併爲其添加了一個'email'字段。
class NewUserCreationForm(forms.ModelForm):
"""
A form that creates a user, with no privileges, from the given username and password.
"""
username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\[email protected]+-]+$',
help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
help_text = _("Enter the same password as above, for verification."))
email = forms.EmailField(label=_("Email"), max_length=75)
class Meta:
model = User
fields = ("username", "email")
def clean_username(self):
username = self.cleaned_data["username"]
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(_("A user with that username already exists."))
def clean_password2(self):
password1 = self.cleaned_data.get("password1", "")
password2 = self.cleaned_data["password2"]
if password1 != password2:
raise forms.ValidationError(_("The two password fields didn't match."))
return password2
def save(self, commit=True):
user = super(NewUserCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
user.email = self.email
if commit:
user.save()
return user
class CustomUserAdmin(UserAdmin):
add_form = NewUserCreationForm
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
但這種代碼是行不通的。我可以看到表單呈現,但沒有電子郵件字段,只有用戶名,密碼1和密碼2字段。
這是什麼,我在這裏失蹤?
榮譽張貼的代碼。注意:你應該**擴展** UserAdmin而不是** fork **它。 – jpic 2012-03-09 11:33:29
@jpic是的,我想先擴展它。這是乾的。但是Django又一次出現了這樣可怕的文檔(很棒的文檔,但是文檔很糟糕),它們只是爲UserCreationForm放置了一行代碼。 – pcx 2012-03-09 11:37:30
文檔可能不是很好,但您始終可以查看代碼本身。 – 2012-03-09 12:28:14