使用管理员身份注册自定义用户模型

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

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

这个模型在我的应用程序中定义,称为 MyApp.models

我该如何使新的User 模型显示在“身份验证和授权”下,就像原始的 django.contrib.auth 模型一样?

输入图像描述


你能够实现这个吗? - Chirdeep Tomar
No unfortunately - gozzilli
你修好了吗? - Öykü
6个回答

1
我认为你正在寻找替换django用户模型的方法。要做到这一点,请参见此帖子上的答案: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


1
class User(AbstractUser):

    class Meta:
    app_label = 'auth'

这可以解决你的问题,但在迁移应用程序时可能会导致某些错误。另一个方法是在你的AdminSite中定义get_app_list

0
在 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)如果我使用我的 User 类,它会出现在我的应用程序中;b)如果我使用Django auth的类,它不会出现在任何地方(这并不奇怪,因为那不是我用来表示用户的类)。 - gozzilli
我有一个超级用户,是的。 - gozzilli

0

尝试这个:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy as _

class AdminExtra(UserAdmin):
    add_form_template = "admin/auth/user/add_form.html"
    change_user_password_template = None
    fieldsets = (
        (None, {"fields": ("username", "password")}),
        (_("Personal info"), {"fields": ("first_name", "last_name", "email", "nick_name")}),
        (
            _("Permissions"),
            {
                "fields": (
                    "is_active",
                    "is_staff",
                    "is_superuser",
                    "groups",
                    "user_permissions",
                ),
            },
        ),
        (_("Important dates"), {"fields": ("last_login", "date_joined")}),
    )
    add_fieldsets = (
        (
            None,
            {
                "classes": ("wide",),
                "fields": ("username", "password1", "password2"),
            },
        ),
    )


admin.site.register(User, AdminExtra)

1
请尝试添加更多评论,感谢Erfan的答案。 - innicoder

0

0
我该如何让新的用户模型显示在“身份验证和授权”下面?
我在使用Django 3.0时也有同样的担忧,这是我解决它的方法:
class CustomUser(AbstractUser):
    
     class Meta:
         db_table = 'auth_user'
         app_label = 'auth'

在设置中:

AUTH_USER_MODEL = "auth.CustomUser"

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