向 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) 如果我使用 myUser
类,它会出现在我的应用程序中; 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 自定义注册无法保存额外字段