自定义用户模型中仍然需要用户名

时间:2013-04-15 19:17:51

标签: django django-admin

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

1 个答案:

答案 0 :(得分:0)

Django Documentation表示必须重写表单:

  
      
  • UserCreationForm
  •   
     

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

     
      
  • UserChangeForm
  •   
     

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

有相关的故障单:https://code.djangoproject.com/ticket/19353,但代码仍然需要username字段。