我正在尝试使用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中的错误吗?
答案 0 :(得分:0)
Django Documentation表示必须重写表单:
- UserCreationForm
取决于用户模型。必须为任何自定义用户模型重写。
- UserChangeForm
取决于用户模型。必须为任何自定义用户模型重写。
有相关的故障单:https://code.djangoproject.com/ticket/19353,但代码仍然需要username
字段。