自定义用户表单替代内置 + 自定义必填字段

0 投票
1 回答
810 浏览
提问于 2025-04-18 03:41

我在用Django搭建一个用户登录/登出系统,最近开始尝试Django的认证系统。

我使用了自定义的Django UserCreationForm,代码如下:

views.py

from django.contrib.auth.forms import UserCreationForm

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST) 
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/books/")
    else:
        form = UserCreationForm()
    return render(request, "registration/register.html", {
        'form': form,
    })

但是这个表单显示了很多不需要的内容,具体可以在这里查看: https://app.box.com/s/wmrtyal3mctb9hctsnom

首先,我想去掉那些多余的信息,有什么好的方法吗?有没有简单的办法?我能自己编辑UserCreationForm吗,还是说我需要创建一个新的表单?

其次,假设我想在注册页面添加更多必填字段,最好的方法是什么?比如我想让用户选择性别,是男还是女——我知道我应该扩展用户模型,但我该如何同时将信息注册到原始用户模型和扩展后的用户模型呢?

1 个回答

2

与其扩展 UserCreationForm 类,不如直接重写它。你可以在这个 链接 中查看它的源代码。

举个例子,如果你想去掉密码字段旁边的提示文字“输入与上面相同的密码”,只需删除这一行:

help_text=_("Enter the same password as above, for verification."))

来自 django /django/contrib/auth/forms.py(在上面的链接中)


编辑:我建议你重写表单类而不是扩展它们,是因为这样做更方便。根据 Django 的文档:

如果你不想使用内置的视图,但又想享受不必为这个功能编写表单的便利,认证系统提供了几个内置的表单,位于 django.contrib.auth.forms 中。

如果你要扩展你的用户模型类,你就需要相应地更改表单类。文档中提到:

正如你所预期的,Django 的内置表单和视图对它们所处理的用户模型有一些假设。如果你的用户模型不符合这些假设,可能需要定义一个替代的表单,并将该表单作为认证视图配置的一部分传入。

更多细节请查看 这里这里

如果你只是想修改 UserCreationForm,你可以像我上面提到的那样编辑 forms.py 模块中的 UserCreationForm 类。

如果,正如你在问题中提到的,你想在注册页面添加更多必填字段,你需要创建一个自定义的用户模型。有关如何做到这一点的详细信息,请查看 这里

撰写回答