自定义用户表单,而不是内置+自定义必填字段

时间:2014-04-22 03:09:27

标签: python django django-authentication

我正在使用django构建登录/注销用户系统,我开始使用django auth系统。

我正在使用自定义的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 个答案:

答案 0 :(得分:2)

您应该重写它,而不是扩展UserCreationForm类。查看它的来源here

例如,如果您想要删除密码字段旁边的文字“输入与上面相同的密码”,请删除此行:

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

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


编辑:我建议您重写表单类而不是扩展它们的原因是因为这样方式更方便。来自Django文档:

  

如果您不想使用内置视图,但希望方便   无需为此功能编写表单,   身份验证系统提供了几种内置的表单   django.contrib.auth.forms

如果要扩展User模型类,则需要相应地更改表单类。再次来自文档:

  

正如您所料,内置Django的表单和视图是肯定的   关于他们正在使用的用户模型的假设。如果你的   用户模型不遵循相同的假设,可能有必要   定义一个替换表单,并将该表单作为一部分传递   auth视图的配置。

有关详细信息,请参阅herehere

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

如果您在问题中提到,要在注册页面中添加更多必填字段,则需要制作自定义用户模型。有关如何执行此操作的详细信息,请参阅here