简体   繁体   English

扩展Django用户模型并在admin上显示

[英]Extend Django User model and show this on admin

I use the latest django for an intranet project. 我将最新的django用于Intranet项目。 Well, I followed the django documentation to extend my models: 好吧,我按照django文档扩展了我的模型:

from django.db import models
from django.contrib.auth.models import AbstractUser

class Employee(AbstractUser):
    DEPARTMENTS = (
        ('ARE', 'Area Manager'),
        ('IT', 'IT'),
        ('CAT', 'Category manager'),
        ('CON', 'Controling')
    )
    departement = models.CharField(max_length = 3, verbose_name = "Département", choices = DEPARTMENTS)

After that, I rewrited the admin.py: 之后,我重写了admin.py:

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

from .models import Employee

# Define an inline admin descriptor for Employee model
# which acts a bit like a singleton
class EmployeeInline(admin.StackedInline):
    model = Employee
    can_delete = False
    verbose_name_plural = 'Employees'

# Define a new User admin
class UserAdmin(BaseUserAdmin):
    inlines = (EmployeeInline,)

# Re-register UserAdmin
# admin.site.register(User) # return error: django.contrib.admin.sites.NotRegistered: The model User is not registered
admin.site.unregister(User)
admin.site.register(User, UserAdmin)

As you can see on the 3 last line of my admin.py, if I register User model I have an error. 正如您在admin.py的最后3行看到的那样,如果我注册用户模型,则会出错。 If I comment my last lines 如果我评论我的最后几行

# Re-register UserAdmin
#admin.site.unregister(User)
admin.site.register(User, UserAdmin)

I haven't my User administration: 我还没有用户管理: 管理站点django没有用户管理问题

Your problem is that your project has a custom model user definition. 您的问题是您的项目具有自定义模型用户定义。 The advised way to get the user class in this case is using get_user_model() from django.contrib.auth . 在这种情况下,建议的获取用户类的方法是使用django.contrib.auth get_user_model()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM