Ich habe es geschafft, die Aktion "Ausgewählte löschen" zu deaktivieren. Einfach.
Ein Benutzer kann jedoch weiterhin auf ein Element klicken, und unten befindet sich der rote Link Löschen.
Ich habe es geschafft, die Aktion "Ausgewählte löschen" zu deaktivieren. Einfach.
Ein Benutzer kann jedoch weiterhin auf ein Element klicken, und unten befindet sich der rote Link Löschen.
Antworten:
Einfach :)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
Wenn Sie eine bestimmte nicht benutzerdefinierte deaktivieren möchten, tun Sie dies. In Django 1.6.6 musste ich get_actions
plus define erweitern has_delete_permission
. Die has_delete_permission
Lösung beseitigt für mich nicht die Aktion aus dem Dropdown:
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
actions = ['your_custom_action']
Wenn Sie es nicht einbeziehen, funktioniert es nur für die benutzerdefinierten Aktionen (defs), die Sie für dieses Modell definiert haben. Die Lösung AdminSite.disable_action('delete_selected')
deaktiviert sie für alle Modelle, sodass Sie sie später für jeden modelAdmin explizit einfügen müssen
actions = None
anstelle von verwenden get_actions()
.
has_delete_permission
scheint mir genug zu sein, um das Löschen überall zu deaktivieren. del actions['delete_selected']
löst einen Schlüsselfehler aus. Danke :)
Deaktivieren Sie einfach die yourapp.delete_yourmodel
Berechtigung für diesen Benutzer oder die Gruppe, zu der er gehört.
Nun, Sie verwenden wahrscheinlich:
AdminSite.disable_action('delete_selected')
Zur weiteren Kontrolle implementieren Sie einfach Ihren eigenen Administrator und stellen seine Aktionen auf das ein, was Sie benötigen:
class MyModelAdmin(admin.ModelAdmin):
actions = ['whatever', 'actions']
Referenz: http://docs.djangoproject.com/de/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
admin.site.disable_action('delete_selected')
Aus den Dokumenten
Die Lösungen hier sind bereits nett, aber ich bevorzuge es als wiederverwendbares Mixin, wie folgt:
class NoDeleteAdminMixin:
def has_delete_permission(self, request, obj=None):
return False
Sie können dies in allen Ihren Administratoren verwenden, in denen Sie das Löschen wie folgt verhindern möchten:
class MyAdmin(NoDeleteAdminMixin, ModelAdmin):
...
Das ist sehr alt, aber es kann trotzdem jemandem helfen.
Angenommen, OPs
... Benutzer kann immer noch auf ein Element klicken und dann gibt es den roten Link Löschen unten.
bezieht sich auf die rote Schaltfläche in der Ansicht "Ändern". Diese Schaltfläche kann durch Erweitern der ModelAdmin.change_view
Methode wie folgt entfernt werden:
def change_view(self, request, object_id=None, form_url='', extra_context=None):
return super().change_view(request, object_id, form_url,
extra_context=dict(show_delete=False))
Sie können dasselbe mit show_save
und tun show_save_and_continue
. Weitere Infos und Alternativen hier .
Beachten Sie auch, dass Django ab Version 2.1 über separate has_view_permission
( Dokumente ) verfügt, die je nach Anwendungsfall möglicherweise eine bessere Option darstellen .