我错过了什么 .
我的Django项目中有一个自定义用户模型 . 它使用电子邮件作为其用户名字段 .
myproject / users / 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()
...
settings.py:
AUTH_USER_MODEL = 'users.CustomUser'
我写了一个从我的HTML登录表单接收POST请求的视图,并调用stock auth登录视图来获取它的响应:
myproject / users / 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登录视图将使用内置的auth AuthenticationForm
,其中apparently works with any subclass of AbstractBaseUser .
1 回答
对,得到了 .
我自己编写了我的登录表单HTML(而不是使用Django的表单模板标记来渲染它),我的电子邮件字段如下所示:
我相信股票认证登录视图需要用户名等效字段实际上被称为
username
,如下所示:一旦我做出改变,它就可以了 .