使用get_inline_instances覆盖添加权限?

时间:2016-07-18 18:08:46

标签: python django django-admin

我目前有一堆内联,所有内联都是从这样的基础内联类设置继承的:

class BaseInlineAdmin(admin.TabularInline):
    extra = 0

    def has_delete_permission(self, request, obj=None):
        return False

    def has_add_permission(self, request):
        return False 

我现在想要更改我的管理员,以便根据用户的不同,内联更改如下:

class PartyAdmin(admin.ModelAdmin):
      inline1 = [Inline1, Inline2]
      inline2 = [Inline1, Inline2, Inline3]

      def get_inline_instances(self, request, obj=None):
          if request.user.is_staff:
               return [inline(self.model, self.admin_site) for inline in self.inline1]
          else:
               return [inline(self.model, self.admin_site) for inline in self.inline2]

然而,当我这样做时,has_add_permission不再有效。当我不使用get_inline_instances时,用户无法添加其他项目,我希望此功能保持一致。当我使用这种方法时,有没有任何理由不继续?

对于记录,has_delete_permission仍为False,这使得情况更加怪异。

1 个答案:

答案 0 :(得分:1)

get_inline_instances是检查权限的方法。如果要检查权限,则必须致电super().get_inline_instances(),或者需要复制original function中的代码。