「選択したものを削除」アクションを無効にすることができました。簡単です。
ただし、ユーザーは引き続きアイテムをクリックすることができ、下部に赤い[削除]リンクがあります。
シンプル:)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
単にyourapp.delete_yourmodel
そのユーザーまたはユーザーが属するグループの許可。
おそらくあなたは使用しています:
AdminSite.disable_action('delete_selected')
さらに制御するには、独自の管理者を実装し、そのアクションを必要なものに設定するだけです。
class MyModelAdmin(admin.ModelAdmin):
actions = ['whatever', 'actions']
リファレンス: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
admin.site.disable_action('delete_selected')
docs から
これは非常に古いですが、それでも、誰かを助けるかもしれません。
OPが
...ユーザーは引き続きアイテムをクリックでき、下部に赤い[削除]リンクがあります。
「変更」ビューの赤いボタンを指します。このボタンは、次のようにModelAdmin.change_view
メソッドを拡張することで削除できます。
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))
show_save
とshow_save_and_continue
でも同じことができます。詳細と代替案 こちら 。
また、Django2.1には別のhas_view_permission
(- docs )、あなたのユースケースに応じて、これはより良いオプションかもしれません.
ここでのソリューションはすでにニースですが、私は次のように再利用可能なミックスインとしてそれを好む:
class NoDeleteAdminMixin:
def has_delete_permission(self, request, obj=None):
return False
次のように、削除を防止したいすべての管理者でこれを使用できます。
class MyAdmin(NoDeleteAdminMixin, ModelAdmin):
...