如何在Django管理页面的注册表单中删除用户名字段?

10

使用rest-framework和django-allauth的设置标志来删除用户名作为登录和注册所必需的:

#settings.py
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False

但是我仍然在管理员的注册表单和用户列表中看到用户名字段(空用户没有用户名)。

我该如何删除它?

5个回答

13

基本上,这涉及创建一个自定义用户模型,并告知Django和Django管理部分应该使用它,而不是标准模型。

您的类将如下所示。

class User(AbstractUser):
    username = None
    email = models.EmailField(_('email address'), unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

实现的详细信息可以在此处找到。


2
请注意,此答案不完整。在答案中提到的文章https://www.fomfus.com/articles/how-to-use-email-as-username-for-django-authentication-removing-the-username/中漏掉了一个`CustomUserManager`的实现。您能否编辑您的答案以包括它? - Fed

2

您需要定义自己的自定义用户模型以将其从Django admin中删除。如果您可以使用Django的带有用户名的用户模型,但想要将其从序列化程序(DRF)中删除,则可以定义自己的自定义登录和注册序列化程序,并在那里删除用户名。


1

0

0
在我的情况下,我只是在那里放置了“username = None”。然后它就消失了。 完整代码:
from django.utils.translation import gettext_lazy as _
class LectureUser(AbstractUser):
  username = None
  identifier = models.IntegerField(primary_key=True)
  email = models.EmailField(_('email address'))
  USERNAME_FIELD = 'identifier' # Set to the unique identifier we define.
  objects = CustomUserManager()

希望这能有所帮助 :-)

什么是_?PyCharm显示未解决的引用'_' - MrObjectOriented
1
@ReeshabhRanjan 从django.utils.translation导入gettext_lazy as _ - Jerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接