3

我基本上有 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 注册中

这不是浪费精力吗?你有更好的主意吗?

4

0 回答 0