我基本上有 2 个覆盖UserAdmin 模型的外部 Django 应用程序。其中每一个都将首先注销 UserAdmin 模型,然后注册自己的模型,如下所示:
admin.site.unregister(get_user_model())
admin.site.register(get_user_model(), ExternalAppUserAdmin)
反过来,我也覆盖了 UserAdmin:
admin.site.unregister(get_user_model())
admin.site.register(get_user_model(), MyAppUserAdmin)
问题在于,根据设置INSTALLED_APPS
文件中的顺序,只有最后一个应用程序实际上会覆盖.UserAdmin
大多数情况下,这些覆盖只是InlineModelAdmin
在 AdminUser 内部,所以到目前为止我所做的是导入外部应用程序的 InlineModelAdmin 模型并将它们插入我自己的 admin.py 中。例如:
from relationships.admin import RelationshipInline
....
class BaseProfileAdminStacked( NestedModelAdmin, GuardedModelAdmin):
inlines = [BaseProfileInline, RelationshipInline,]
....
admin.site.unregister(get_user_model())
admin.site.register(get_user_model(), BaseProfileAdminStacked)
但这对我来说似乎有点 hacky,因为例如:
- 第一个外部应用程序将取消注册 UserAdmin,然后使用自己的自定义再次注册它
- 第二个外部应用程序也会这样做,实际上会覆盖第一个
- 然后我自己的应用程序应该从外部应用程序导入所有 AdminInline 并将它们包含在我自己的 UserAdmin 注册中
这不是浪费精力吗?你有更好的主意吗?