2010-10-28 11 views

Antwort

9

Nun werden Sie wahrscheinlich verwenden:

AdminSite.disable_action('delete_selected') 

Für weitere Kontrolle nur Ihre eigenen Server-Betreiber implementieren und setzen ihre Aktionen auf das, was Sie brauchen:

class MyModelAdmin(admin.ModelAdmin): 
    actions = ['whatever', 'actions'] 

Referenz: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action

+4

Funktioniert nicht müssen. Hat keinen Einfluss auf die einzelne Seite. Deaktiviert nur die Aktion beim Durchsuchen der Liste. –

10

einfach deaktivieren die yourapp.delete_yourmodel Berechtigung für diesen Benutzer oder die Gruppe, zu der er gehört.

+0

Dies funktioniert nicht in Django 1.3 und früheren Versionen, wegen dieses Problems https://code.djangoproject.com/ticket/8060 Es ist in Django 1.4 behoben. –

100

Einfach :)

class DeleteNotAllowedModelAdmin(admin.ModelAdmin): 
    # Other stuff here 
    def has_delete_permission(self, request, obj=None): 
     return False 
+8

Die Aktion befindet sich immer noch im Dropdown, wirft aber ein verbotenes 403. Um es zu bereinigen, musst du meiner Lösung folgen. Und mach das auch. – radtek

+0

Möchten Sie das Dropdown auch entfernen, befolgen Sie in diesem Fall die Lösung von radtek – thevangelist

+1

@radtek Sie sind sicher, dass die Aktion weiterhin im Dropdown-Menü angezeigt wird, aber das OP hat angegeben, dass er die Aktion zum Löschen löschen bereits deaktiviert hat . Das ist alles, was nötig ist. – McKay

61

Wenn Sie eine spezifische deaktivieren möchten, die nicht benutzerdefinierte dies tun wird. In Django 1.6.6 musste ich get_actions plus definieren has_delete_permission verlängern. Die has_delete_permission Lösung wird nicht loswerden der Aktion aus der Dropdown für mich:

class MyModelAdmin(admin.ModelAdmin): 

    .... 

    def get_actions(self, request): 
     #Disable delete 
     actions = super(MyModelAdmin, self).get_actions(request) 
     del actions['delete_selected'] 
     return actions 

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

einschließlich Nicht in actions = ['your_custom_action'], funktioniert nur für die benutzerdefinierte Aktionen (defs) Sie für dieses Modell definiert haben. Die Lösung AdminSite.disable_action('delete_selected'), deaktiviert es für alle Modelle, so würden Sie sie explizit enthalten später für jede Modeladmin

+1

Ich verstehe nicht, warum die Rückgabe von has_delete_permission als false die Aktion nicht los wird. Ich musste beides im Django 1.6.6 machen – radtek

1

admin.site.disable_action('delete_selected')

Vom docs