1

我错过了一些东西。

我的 Django 项目中有一个自定义用户模型。它使用电子邮件作为其用户名字段。

我的项目/用户/models.py:

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name='E-mail address',
        max_length=255,
        unique=True,
        db_index=True,
    )
    is_active = models.BooleanField(default=True)

    USERNAME_FIELD = 'email'


    objects = CustomUserManager()

    ...

设置.py:

AUTH_USER_MODEL = 'users.CustomUser'

我编写了一个从我的 HTML 登录表单接收 POST 请求的视图,并调用 stock auth login 视图以获取其响应:

我的项目/用户/views.py:

from django.contrib.auth.views import login

...

def log_in(request, template_name):
    response = login(request, template_name=template_name)

    return response

(它会做更多的事情,但我已经注释掉了其他代码以消除它作为我看到的不需要的行为的原因。)

当我尝试登录浏览器时(使用我最初创建的超级用户的电子邮件地址和密码syncdb),我收到一个表单错误:

username: This field is required.

怎么来的?我认为 stock auth login 视图将使用内置的 auth AuthenticationForm,它显然适用于AbstractBaseUser.

4

1 回答 1

0

对,明白了。

我自己编写了我的登录表单 HTML(而不是使用 Django 的表单模板标签呈现它),我的电子邮件字段如下所示:

<input id="loginForm_email" name="email" type="email" placeholder="Your e-mail adddress">

我相信股票身份验证登录视图需要实际调用用户名等效字段username,如下所示:

<input id="loginForm_email" name="username" type="email" placeholder="Your e-mail adddress">

一旦我进行了更改,它就可以正常工作。

于 2013-06-12T15:25:55.057 回答