我正在尝试使用 Django 1.5 中的新功能来使用电子邮件地址作为用户名。
一切工作正常,禁止管理站点更新用户,我不得不使用以下代码使密码看起来不原始(并使用密码更改表单等):-
class PlayerChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = Player
class PlayerCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = Player
class PlayerAdmin(auth.admin.UserAdmin):
form = PlayerChangeForm
add_form = PlayerCreationForm
ordering = ['first_name', 'last_name']
list_display = ('primkey', 'email', 'mobile')
list_editable = ('email', 'mobile')
list_filter = ()
fieldsets = ((None, {'fields': ('username', 'first_name', 'last_name', 'email', 'password', 'mobile')}),
('Permissions', {'fields': ('is_active', 'is_admin')}),
('Important dates', {'fields': ('last_login', )}),
)
add_fieldsets = ((None, {
'classes': ('wide',),
'fields': ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')}
),
)
filter_horizontal = ()
def primkey(self, obj):
return ("%s" % (obj.get_full_name()))
primkey.short_description = 'Player'
这使管理页面看起来不错,但是当我实际尝试更新播放器时,它告诉我表单上有错误,但没有指出在哪里。
经过一番折腾,事实证明它希望设置用户名字段(如果我将其添加到管理表单中,它会说该字段是必需的)但肯定不是这种情况,因为我已经设置了我的 USERNAME_FIELD成为“电子邮件”?
如果我将该字段设置为某些内容,则可以保存对其他字段所做的任何更改,但不会将我的更新保存到用户名字段。但实际上,我根本不想设置用户名——我使用电子邮件作为用户名。
关于这个的任何想法或者这是Django中的一个错误?