django - 修改Django UserCreationForm

标签 django django-admin django-authentication

我想将更多字段添加到标准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行时,该错误将立即消失。为什么不显示?

我的本地应用程序目录中也没有任何管理模板。这可能是问题吗?

最佳答案

您需要将添加的字段添加到自定义用户admin类的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 - 修改Django UserCreationForm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6682978/

相关文章:

Django 管理搜索查询未命中 Postgres 索引

python - 在 Django 管理更改/添加页面中显示外键数据

python - 跨域请求的 CSRF 免除 Django 身份验证密码重置 View

django-models - 自动为 OneToOne 字段选择相关

django - 如何在 Django admin 中正确显示多字应用程序名称(即带空格)?

django - (Django) 在不同域上的两个站点之间共享身份验证

django - 如何在序列化器中设置默认值?

python - 需要有关解决 Wagtail/SQL Azure 兼容性问题的建议

Django - UploadedFile.content_type 检查上传文件的标题还是仅检查扩展名?

管理页面上的 django unicode 错误