我正在使用django构建登录/注销用户系统,我开始使用django auth系统。
我正在使用自定义的Django UserCreationForm:
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,还是我必须创建自己的表单?
其次,假设我想在注册页面中添加更多必填字段,最好的方法是什么?假设我想让一个人注册男性或女性的情况 - 我意识到我应该扩展用户模型,但我如何注册原始用户模型和扩展用户模型?
答案 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视图的配置。
如果您只是想更改UserCreationForm ,您可以像在我上面提到的那样编辑Forms.py模块中的UserCreationForm类。
如果您在问题中提到,要在注册页面中添加更多必填字段,则需要制作自定义用户模型。有关如何执行此操作的详细信息,请参阅here