2016-07-18 12 views
1

次のように設定し、私は現在、すべてがベースのインラインクラスから継承するインラインの束を持っている:私は今、ユーザーによっては、インラインはそうのように変化するように私の管理者を変更したいget_inline_instancesを使用すると、追加権限が上書きされますか?

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は偽のままであり、状況をさらに奇妙にする。

答えて

1

get_inline_instancesは、アクセス許可をチェックする方法です。アクセス許可をチェックする場合は、に電話するか、original functionのコードを複製する必要があります。

+0

いいですが、なぜhas_delete_permissionが機能していたのでしょうか? – Written

関連する問題