2016-12-30 140 views
1

我正在使用django-registration软件包制作一个django网站。我希望用户使用他们的电子邮件注册并且没有用户名,这样我就可以使用他们的实际名称(如在Facebook上)的界面并通过他们的电子邮件跟踪他们。相同的用户名和电子邮件的Django用户?

我需要一个用户配置文件,并计划扩大与oneToOne场后对用户的模式,但现在我不知道如何使用自己的电子邮件作为用户名。我想我可以简单地向用户询问他们的电子邮件,并将其作为用户名存储,这将是一个简单的修复。但是,它会要求我修改所有的表单,并会在数据库中创建基本上重复的列(email = username)。

这个问题实在是开放式的,我想知道是否有改变用户模型中期项目的简单方法。我已经阅读了有关User(AbstractUser)类的文档,但是只有当我们刚开始项目时,这看起来才是好的。

谢谢,任何帮助将不胜感激。

回答

1

您可以通过扩展AbstractBaseUser编写自定义的用户类,并声明电子邮件字段USERNAME_FIELD,如:不延长AbstractBaseUser可以在你的apps.py导入用户模型周围

USERNAME_FIELD = 'email' 

另一个工作,并设置USERNAME_FIELD像:

from django.contrib.auth.models import User 
User.USERNAME_FIELD = 'email' 
+0

请提供一些细节,我还是很迷茫。这似乎是一个非常简单和直接的修复,但我无法正确实施它。谢谢! –

+0

'django.contrib.auth.models.User'使用'username'来唯一标识用户。如果你想覆盖这种行为,你有两个选择,写入自定义身份验证后端,允许您使用'django.contrib.auth.models.User'的非唯一'email'字段标记为'USERNAME_FIELD'或写入自定义用户模型通过继承'AbstractUser'类。如果你不想陷入认证后端,我建议你写自定义的用户模型。 – Darshit

相关问题