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.
django
django-admin
Peter Bengtsson
quelle
quelle
Wenn Sie eine bestimmte nicht benutzerdefinierte deaktivieren möchten, tun Sie dies. In Django 1.6.6 musste ich
get_actions
plus define erweiternhas_delete_permission
. Diehas_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ösungAdminSite.disable_action('delete_selected')
deaktiviert sie für alle Modelle, sodass Sie sie später für jeden modelAdmin explizit einfügen müssenquelle
actions = None
anstelle von verwendenget_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.quelle
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
quelle
admin.site.disable_action('delete_selected')
Aus den Dokumenten
quelle
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): ...
quelle
Das ist sehr alt, aber es kann trotzdem jemandem helfen.
Angenommen, OPs
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 tunshow_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 .quelle