Django Admin 从索引和应用程序页面中排除模型

Django Admin exclude model from index and app page

我想在管理索引页面和应用程序页面中隐藏一些模型。例如,我在 inlines 中看到的这些作为相关对象。
还有一点,我想保留使用 change_viewadd_view 的能力,而不是该模型的 list_view

试图在 admin/templates/admin/*.html 个文件中找到任何提示,但没有找到任何有用的信息。

没有“黑客”、猴子补丁和外部库是否可能?

你可以试试这个

这将从索引中隐藏模型

class YourModel(admin.ModelAdmin):
    def get_model_perms(self, request):    
        return {}  # return empty

admin.site.register(YourModel, YourModelAdmin)

关于 Django 管理的更多信息 https://docs.djangoproject.com/en/3.1/ref/contrib/admin/

正如Django documentation所说:

ModelAdmin.has_module_permission(request)
Should return True if displaying the module on the admin index page and accessing the module’s index page is permitted, False otherwise. Uses User.has_module_perms() by default. Overriding it does not restrict access to the view, add, change, or delete views.

为避免删除所有权限(如 get_model_perms()),您可以将 has_module_permission() 方法重新定义为始终 return False.

@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):

    def has_module_permission(self, request):
        return False