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

时间:2018-03-22 08:20:29

标签: django django-admin

我想根据值隐藏django管理界面中的模型 在数据库中。

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

    from foo.models import MyModel
    if MyModel.objects.filter(...).exists():
        from foo.models import ModelToHide
        admin.site.unregister(ModelToHide)

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

这在CI中失败了。

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

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

1 个答案:

答案 0 :(得分:12)

我认为解决方案在于this bit of the admin logic

因此,您需要为模型提供自定义252,然后在ModelAdmin中覆盖get_model_perms以执行此类操作:

admin.py

Django检查这些权限是否为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) - 如果没有,则会隐藏模型。