无法从 django 默认身份验证表单访问 form.first_name 和 form.email

问题描述

我使用认的 Django AuthenticationForm() 作为用户登录功能。现在,当我在 Django admin 中看到用户模型内部时,它包含用户名、电子邮件地址、名字姓氏和活动状态等字段。

但是在我的 sign-in.html 页面我只能访问 form.username 和 form.password,而不能访问 form.email 和 form.first_name??

我的观点:

def login(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            authlog(request,user)
            return redirect('home')
        else:
            messages.error(request,'Invalid username or password')
            # back_page = request.Meta.get('HTTP_REFERER')
            return redirect('login')
            # messages.error(request,student_form.errors,'Incorrect')
            # return HttpResponse(back_page)
    else:
        content = {
            'form': AuthenticationForm()
        }
        return render(request,'sign-in.html',content)

<div class="input-group">
  <span class="input-group-text" id="basic-addon1"><span class="fas fa-envelope"></span></span>

     {{form.emailaddress}}
</div>


<div class="input-group">
   <span class="input-group-text" id="basic-addon2"><span class="fas fa-unlock-alt"></span></span>
      {{form.password}}
</div>

在这里我可以访问 form.password 和 form.username 但无法使用电子邮件地址登录。但我们知道我们也应该能够使用电子邮件地址登录

我有 html 页面图片

Sign-In Page

解决方法

身份验证表单只有用户名和密码字段。因此您无法访问任何其他字段,因为它们未定义。

如果您需要身份验证表单上的其他字段,您可以按照 in the documentation 所述在您的设置中更改 USERNAME_FIELD

如果您确实需要更复杂的东西,您也可以编写全新的身份验证表单。