django - 在 django 中扩展用户管理表单

标签 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)

问题是每当我用密码保存用户时,它都会显示为没有哈希值。我想问题是,我需要用新表单对密码字段进行哈希处理。但旧的形式可以做到这一点,那么有没有办法可以扩展旧的形式?

最佳答案

您可以在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 管理中设置密码。

关于django - 在 django 中扩展用户管理表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057280/

相关文章:

C++:将类的子项存储在具有其类型的变量中

windows - 如何确定接口(interface)是否是 Windows PC 上的物理 LAN 端口?

css - Wordpress 管理栏出现在底部且没有 CSS

python - Django ImportError 没有命名的模块

django - 如何在没有迭代的情况下为查询集从多对多中删除对象?

C# 如何在派生类中添加属性 setter ?

python - 如何在Python中向继承方法添加装饰器而不复制整个方法?

vbscript - 通过路径而不是名称检索具有多个用户的进程的 PID

python - 如何在 django 中执行...重复 key 更新...

python - 我可以在没有 ORM 的情况下从 Django 查询辅助数据库吗?