修改 Django UserCreationForm

Posted

技术标签:

【中文标题】修改 Django UserCreationForm【英文标题】:Modifying Django UserCreationForm 【发布时间】:2011-10-04 16:59:56 【问题描述】:

我想在标准的 Django UserCreationForm 中添加更多字段,所以我继续在我的应用程序的 forms.py 文件中对其进行子类化,结果如下:

class CustomUserCreationForm(UserCreationForm):
    email = forms.EmailField(label = "Email")
    first_name = forms.CharField(label = "First name")
    last_name = forms.CharField(label = "Last name")

    class Meta:
        model = User
        fields = ("first_name", "last_name", "username",)

    def save(self, commit=True):
        user = super(CustomUserCreationForm, self).save(commit=False)
        user.first_name = first_name
        user.last_name = last_name
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

然后我继续为我的用户创建了一个自定义 ModelAdmin,如下所示:

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    inlines = [ProfileInline,]


admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
admin.site.register(Class, ClassAdmin)

但是,无论我做什么,当我进入管理页面并尝试添加新用户时,新的 CustomUserCreationForm 都不会出现。我在哪里搞砸了?

编辑:似乎没有显示该表单,但正在使用该表单。如果我尝试仅使用典型 UserCreationForm 具有的用户名和密码字段来添加新用户,我会收到一个错误,当我在我的 ModelAdmin 中删除 add_form 行时,该错误会立即消失。为什么不显示?

我的本​​地应用程序目录中也没有任何管理模板。会不会是这个问题?

【问题讨论】:

【参考方案1】:

您需要将已添加的字段添加到自定义用户管理类的 add_fieldsets 属性中。

#example:
add_fieldsets = (
        (None, 
            'classes': ('wide',),
            'fields': ('username', 'email', 'password1', 'password2')
        ),
    )

前几天,一位用户提出了类似的问题:How can I have Django user registration single step (instead of two step)process with email compulsory?,其中还涉及创建自定义用户管理表单。

【讨论】:

如何更改显示在此(第一个)表单上方的“输入用户名和密码”文本?

以上是关于修改 Django UserCreationForm的主要内容,如果未能解决你的问题,请参考以下文章

django-22.admin首页和title修改

django 默认权限对应表怎么修改

Django线上部署代码修改失效问题

在 Django 会话中修改字典不会修改会话

Django 使用 key=value 选项修改对象

Django修改用户密码