簡體   English   中英

使用管理員身份注冊自定義用戶 model

[英]Register custom user model with admin auth

在 Django 項目中,我有一個自定義用戶 model 添加了一個額外的字段:

class User(AbstractUser):

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

這個 model 在我的應用程序中定義,比如MyApp.models

如何讓新User model 顯示在“身份驗證和授權”下,作為原始django.contrib.auth model?

在此處輸入圖像描述

class User(AbstractUser):

    class Meta:
    app_label = 'auth'

這可以解決您的問題,但可能會在您遷移應用程序時導致一些錯誤。 其他黑客的定義get_app_listAdminSite

我認為您正在尋找的是替換 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

嘗試這個:

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)

在 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)

可能想試試這個:

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

管理應用程序中應用程序和模型的自定義排序。 您還可以從應用程序列表中重命名、交叉鏈接或排除模型。

如何讓新的用戶模型顯示在“身份驗證和授權”下

我使用 Django 3.0 也有同樣的問題,這就是我解決它的方法:

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

在設置中:

AUTH_USER_MODEL = "auth.CustomUser"

您需要導入自定義用戶模型,而不是原始django.contrib.auth.models.User。

所以它應該適用於

from django.contrib.auth.admin import UserAdmin
from myapp.models import CustomUser
admin.site.register(CustomUser, UserAdmin)

在你的admin.py中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM