2

我正在尝试使用 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中的一个错误?

4

1 回答 1

0

Django 文档声明必须重写表单:

  • 用户创建表单

取决于用户模型。必须为任何自定义用户模型重新编写。

  • 用户变更表

取决于用户模型。必须为任何自定义用户模型重新编写。

有一张相关的票:https ://code.djangoproject.com/ticket/19353但代码仍然希望username存在一个字段。

于 2013-04-18T22:57:59.003 回答