web-dev-qa-db-ja.com

In Django Admin Deleteリンクを無効にする方法

「選択したものを削除」アクションを無効にすることができました。簡単です。

ただし、ユーザーは引き続きアイテムをクリックすることができ、下部に赤い[削除]リンクがあります。

63
Peter Bengtsson

シンプル:)

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

単にyourapp.delete_yourmodelそのユーザーまたはユーザーが属するグループの許可。

11

おそらくあなたは使用しています:

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

9
Yuval Adam

admin.site.disable_action('delete_selected')

docs から

2
Lucas B

これは非常に古いですが、それでも、誰かを助けるかもしれません。

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_saveshow_save_and_continueでも同じことができます。詳細と代替案 こちら

また、Django2.1には別のhas_view_permission(- docs )、あなたのユースケースに応じて、これはより良いオプションかもしれません.

0
djvg

ここでのソリューションはすでにニースですが、私は次のように再利用可能なミックスインとしてそれを好む:

class NoDeleteAdminMixin:
    def has_delete_permission(self, request, obj=None):
        return False

次のように、削除を防止したいすべての管理者でこれを使用できます。

class MyAdmin(NoDeleteAdminMixin, ModelAdmin):
    ...
0
devsnd