我正在阅读文档:https://docs.djangoproject.com/en/1.5/topics/auth/customizing/#substituting-a-custom-user-model
所以在我的settings.py中,我把:
AUTH_USER_MODEL = 'membership.User'
在我的会员应用程序models.py我有这个:
from django.contrib.auth.models import AbstractBaseUser
class User(AbstractBaseUser):
USERNAME_FIELD = 'email'
运行python manage.py syncdb给了我:
FieldDoesNotExist: User has no field named 'email'
我检查了AbstractBaseUser类的源代码,当然也定义了该字段,如下所示:https://github.com/django/django/blob/master/django/contrib/auth/models.py#L359
怎么了?
2 回答
AbstractBaseUser
没有电子邮件字段,AbstractUser
.如果要将电子邮件用作唯一标识符,则需要从AbstractBaseUser创建子类并使用
unique=True
定义电子邮件字段,并编写其他功能,例如模型的Manager
:此外,您可能希望将此用户添加到管理页面 . 查看UserAdmin并重新定义它以与使用电子邮件字段作为唯一标识符的新用户模型兼容 .
不幸的是,
django.contrib.auth
中没有任何内容可以简单地进行子类化以获得具有的模型电子邮件地址代替用户名和
与其他
django.contrib.auth
-stuff很好地合作,就像群组一样 .最简单的方法是从
django.contrib.auth
复制models.py
,admin.py
和forms.py
,在整个地方删除用户名并放入其中的电子邮件地址's place. I'已经完成,我在几个客户端项目中成功使用它 .我已经把它放在github和pypi上,所以你可以安装它
并检查usage instructions on github