多次自定义UserAdmin

时间:2015-06-28 18:15:15

标签: python django python-3.x django-models django-admin

我想在多个应用的​​用户管理后端中显示自定义模型。 我可以使用经典的admin.py命令只为一个应用程序执行此操作:

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

from my_user_profile_app.models import Employee

class EmployeeInline(admin.StackedInline):
    model = Employee
    can_delete = False
    verbose_name_plural = 'employee'

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

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

但是,以下应用程序会替换所有以前注册的模型,依此类推...... 是否有一种干净的方法在用户管理后端附加模型? 这就像应用程序的admin.py必须知道之前所做的所有自定义,并再次注册它们。

1 个答案:

答案 0 :(得分:0)

我建议您将所有内联导入到您应用的某个admin.py中,并在那里定义用户admin。

from myapp.admin import MyInline
from my_other_app.admin import MyOtherInline

# Define a new User admin
class MyUserAdmin(UserAdmin): # I would avoid using the same name
    inlines = (MyInline, MyOtherInline)

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

Django没有自动向模型管理员注册其他内联的机制。你可以创建一个,但代码可能很脆弱。我喜欢上面的明确方法。