向 admin auth 注册自定义用户模型

Posted

技术标签:

【中文标题】向 admin auth 注册自定义用户模型【英文标题】:Register custom user model with admin auth 【发布时间】:2016-07-02 23:36:08 【问题描述】:

在一个 Django 项目中,我有一个自定义用户模型,它添加了一个额外的字段:

class User(AbstractUser):

    company = models.ForeignKey(Company, null=True, blank=True)

这个模型是在我的应用程序中定义的,比如MyApp.models

如何让新的User 模型在“身份验证和授权”下显示为原始django.contrib.auth 模型?

【问题讨论】:

你在哪里能做到这一点? 不幸的是没有 你解决了吗? 【参考方案1】:
class User(AbstractUser):

    class Meta:
    app_label = 'auth'

这可以解决您的问题,但可能会在您迁移应用时导致一些错误。另一个技巧是在 AdminSite 中定义 get_app_list

【讨论】:

【参考方案2】:

我认为您正在寻找的是替换 django 用户模型。为此,请参阅此帖子的答案:Extending the User model with custom fields in Django。我建议走扩展路线,但这意味着必须注册父模型和子模型。

如果您真的想要一个模型,只需将 AUTH_USER_MODEL 设置为您的模型。这实质上取代了默认模型。

在你的 settings.py 中:

AUTH_USER_MODEL = "appname.UserModelName"

有关更换用户模型的更多信息,请参阅https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model。

【讨论】:

【参考方案3】:

在 admin.py 中使用

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

UserAdmin.list_display = ('email', 'first_name', 'last_name', 'is_active', 'date_joined', 'is_staff')

admin.site.register(User, UserAdmin)

【讨论】:

这就是我正在做的事情,但是 a) 如果我使用 my User 类,它会出现在我的应用程序中; b) 如果我使用 Django auth 的类,它不会出现在任何地方(这并不奇怪,因为这不是我用来代表用户的类)。 我有一个超级用户,是的。【参考方案4】:

可能想试试这个:

https://libraries.io/pypi/django-modeladmin-reorder

管理应用程序中应用程序和模型的自定义排序。您还可以从应用列表中重命名、交叉链接或排除模型。

【讨论】:

【参考方案5】:

如何让新的用户模型显示在“身份验证和 授权”

我在使用 Django 3.0 时也有同样的顾虑,这就是我解决它的方法:

class CustomUser(AbstractUser):
    
     class Meta:
         db_table = 'auth_user'
         app_label = 'auth'

在设置中:

AUTH_USER_MODEL = "auth.CustomUser"

【讨论】:

以上是关于向 admin auth 注册自定义用户模型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django-graphql-auth 中使用自定义注册突变

django-rest-auth 自定义注册无法保存额外字段

Django之用户认证Auth组件

Django-admin自定义用户信息表

将扩展的 Profile 模型添加到自定义用户模型 admin

三大认证