如何在 django admin 的注册表单中删除用户名字段?

Posted

技术标签:

【中文标题】如何在 django admin 的注册表单中删除用户名字段?【英文标题】:How to remove username field in the register form on django admin? 【发布时间】:2016-07-05 19:05:52 【问题描述】:

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

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

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

如何删除它?

【问题讨论】:

【参考方案1】:

在您的settings.py 文件中:

ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_USERNAME_REQUIRED = False

https://django-allauth.readthedocs.io/en/latest/advanced.html#custom-user-models

【讨论】:

【参考方案2】:

就我而言,我只是将“用户名 = 无”放在那里。然后就没了。 完整代码:

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 说Unresolved reference '_' @ReeshabhRanjan from django.utils.translation import gettext_lazy as _【参考方案3】:

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

您的课程将如下所示。

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

实现细节可以看here

【讨论】:

请注意,这个答案并不完整。缺少CustomUserManager 的实现,这在答案fomfus.com/articles/… 中提到的文章中有所介绍。您能否编辑您的答案以包含该内容?【参考方案4】:

您还可以按照此处的 SO 答案中的说明覆盖基本管理模板:How to override and extend basic Django admin templates?

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于如何在 django admin 的注册表单中删除用户名字段?的主要内容,如果未能解决你的问题,请参考以下文章

Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

如何从Django项目中删除或隐藏应用

如何覆盖 django-redux 默认用户注册表单

django官方demo翻译简化版 七(demo终)

django官方demo翻译简化版 七(demo终)

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?