我目前有一堆内联,所有内联都是从这样的基础内联类设置继承的:
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,这使得情况更加怪异。
答案 0 :(得分:1)
get_inline_instances
是检查权限的方法。如果要检查权限,则必须致电super().get_inline_instances()
,或者需要复制original function中的代码。