根据DB中的值在Django Admin中隐藏模型

gue*_*tli 10 django django-admin

我想根据数据库中的值在d​​jango管理界面中隐藏模型.

我的第一个解决方案是将其添加到ready()应用程序的处理程序:

    from foo.models import MyModel
    if MyModel.objects.filter(...).exists():
        from foo.models import ModelToHide
        admin.site.unregister(ModelToHide)
Run Code Online (Sandbox Code Playgroud)

以上解决方案有效...除外:

这在CI中失败了.

如果CI从头开始构建新系统,则数据库表MyModel尚不存在:

任何提示如何解决这个问题?

sol*_*oke 12

我认为解决方案在于管理逻辑的这一点.

因此,您将为ModelAdmin您的模型提供自定义,然后覆盖get_model_perms以执行以下操作admin.py:

class MyModelAdmin(admin.ModelAdmin):

    def get_model_perms(self, request):
        # Do your check here - if you want to hide the model from the admin then...
         return {
             'add': False,
             'change': False,
             'delete': False,
         }

admin.site.register(MyModel, MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)

Django检查是否有任何这些烫发True- 如果没有,那么它将隐藏模型的视图.