django 默认身份验证表单显示用户名而不是电子邮件

django default Authenticaiton form shows username rather than email

我用 django 实现了自己的用户登录表单,如下所示

from django.contrib.auth.forms import AuthenticationForm

class CustomUserLoginForm(AuthenticationForm):
    class Meta:
        model = CustomUser
        fields = ('email', 'password')

然后作为视图,这就是我所拥有的:

from rest_auth.views import LoginView
from users.forms import CustomUserLoginForm

class CustomLoginView(LoginView): 
    def get(self, request):
        form = CustomUserLoginForm()
        return render(request, "api/test_template.html", context={"form": form})

然后在我的模板中,我在 <form> 标记中调用 {{form.as_p}} 以显示表单输入详细信息。

但是,默认情况下,这会显示用户名和密码表单。如何用电子邮件替换用户名?

在 rest-auth 中,可浏览 api,用户名和电子邮件都存在,所以我知道我可以这样做,因为我使用 rest-auth LoginView 作为后端。

我可以手动解压 {{form}} 因为以后我仍然想设计这个表格的样式。我该怎么做?

更新

我自己在 `api/test_template.html 中解压了表格,现在看起来像下面这样:

{% block content %}

    <div class="container">
        <form method="POST">
        {% csrf_token %}
            <div>
                <label for="{{ form.email.id_for_label }}">Email: </label>
                <input{{ form.email }}>
            </div>

            <div>
                <label for="{{ form.password.id_for_label }}">password: </label>
                <input type="password" {{ form.password }}>
            </div>

            <button style="background-color:#F4EB16; color:blue" class="btn btn-outline-info" type="submit">Login</button>
        </form>
        Don't have an account? <a href="/register" target="blank"><strong>register here</strong></a>!
    </div>
{% endblock %}

这可行,但是,rest-auth 框架仍然要求用户名不能为空。我该如何更改它以忽略用户名?

我的用户模型

from django.contrib.auth.models import AbstractUser
from django.db import models


class CustomUser(AbstractUser):

    def __str__(self):
        return self.email

您应该在 CustomUser 模型上设置 USERNAME_FIELD='email'

How to use email as username 上有一篇不错的博文。