Ich habe es geschafft, die "Delete selected" Aktion zu deaktivieren. Einfach.In Django Admin wie deaktiviere ich den Delete-Link
Aber ein Benutzer kann immer noch auf ein Element klicken und dann gibt es den roten Löschen-Link am unteren Rand.
Ich habe es geschafft, die "Delete selected" Aktion zu deaktivieren. Einfach.In Django Admin wie deaktiviere ich den Delete-Link
Aber ein Benutzer kann immer noch auf ein Element klicken und dann gibt es den roten Löschen-Link am unteren Rand.
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
einfach deaktivieren die yourapp.delete_yourmodel
Berechtigung für diesen Benutzer oder die Gruppe, zu der er gehört.
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. –
Einfach :)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
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
Möchten Sie das Dropdown auch entfernen, befolgen Sie in diesem Fall die Lösung von radtek – thevangelist
@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
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
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
admin.site.disable_action('delete_selected')
Vom docs
Funktioniert nicht müssen. Hat keinen Einfluss auf die einzelne Seite. Deaktiviert nur die Aktion beim Durchsuchen der Liste. –