2016-07-18 6 views
1

ich zur Zeit eine Reihe von inlines haben, die alle von einer Basis erben Inline-Klasse wie folgt aufgebaut:Verwendung von get_inline_instances überschreibt die Berechtigung zum Hinzufügen?

class BaseInlineAdmin(admin.TabularInline): 
    extra = 0 

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

    def has_add_permission(self, request): 
     return False 

Ich möchte jetzt mein Admin ändern, so dass je nach Benutzer, die inlines wie so ändern:

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] 

Allerdings, wenn ich dies tue, funktioniert die has_add_permission nicht mehr. Wenn ich get_inline_instances nicht verwende, hat der Benutzer keine Möglichkeit, ein anderes Element hinzuzufügen, und ich möchte, dass diese Funktionalität konsistent bleibt. Gibt es einen Grund dafür, dass dies nicht übertragen wird, wenn ich diese Methode verwende?

Für die Aufzeichnung bleibt has_delete_permission False, was die Situation noch seltsamer macht.

Antwort

1

get_inline_instances ist die Methode, die die Berechtigung überprüft. Wenn Sie nach Berechtigungen suchen möchten, müssen Sie entweder super().get_inline_instances() aufrufen, oder Sie müssen den Code von der original function replizieren.

+0

Guter Anruf, aber haben Sie eine Idee, warum die has_delete_permission funktionierte? – Written

Verwandte Themen