在django中扩展用户管理表单

时间:2011-11-08 21:28:25

标签: django inheritance admin hash

我正在尝试更改Django中的用户管理员。在我的项目中,需要电子邮件地址,名字和姓氏。我将用户管理员更改为:

class UserForm(forms.ModelForm):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True

class UserAdmin(admin.ModelAdmin):
    form = UserForm
    list_display = ('first_name','last_name','email','is_active')

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

问题在于每当我使用密码保存用户时,它都显示为没有散列。我想问题是,我需要用我的新表单哈希密码字段。但旧的形式是这样做的,那么有没有办法可以扩展旧形式?

1 个答案:

答案 0 :(得分:5)

您可以继承django.contrib.auth.forms中的现有UserChangeForm,并自定义其行为,而不是继承forms.ModelForm

from django.contrib.auth.forms import UserChangeForm

class MyUserChangeForm(UserChangeForm):
    def __init__(self, *args, **kwargs):
        super(MyUserChangeForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['first_name'].required = True
        self.fields['last_name'].required = True

class UserAdmin(admin.ModelAdmin):
    form = MyUserChangeForm

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

以上将使用用户密码的默认行为,即显示密码哈希,并链接到密码更改表单。如果你想修改它,我会看SetPasswordForm,看看如何在Django管理员中设置密码。