Django Logo

[Django]管理サイトの編集画面でセレクトボックスのリストの追加・編集・削除ボタンを非表示にする

Django の管理サイト( admin )では、編集画面のセレクトボックスの隣にリストのアイテムの追加・編集・削除ボタンが表示され、アイテムの編集画面へ移動せずにデータの追加・編集・削除することができます。

Django Selectbox Button Disable 1

赤枠部分のリンクをクリックするとアイテムの追加・編集・削除をすることができます。
ただ、場合によってはこの画面ではリストのアイテムを編集させたくないこともあると思います。
今回はこの赤枠部分のボタンを非表示にする方法を説明したいと思います。

前提条件

  • Python : 3.6.2
  • Django : 3.0.2

実装方法

formfield_for_dbfield 関数をオーバーライドし、下記のように実装すれば、追加・編集・削除ボタンを非表示にできます。

@admin.register(Model)
class ModelAdmin(admin.ModelAdmin):

    fieldsets = ((None, {'fields': ('field_a', 'field_b')}),)

    def formfield_for_dbfield(self, db_field, request, **kwargs):
        formfield = super().formfield_for_dbfield(db_field, request, **kwargs)

        formfield.widget.can_delete_related = False
        formfield.widget.can_change_related = False
        formfield.widget.can_add_related = False

        return formfield

Model とクラス名( ModelAdmin )、 field_afield_b は適宜書き換えてください。

動作確認

追加・編集・削除ボタンが非表示になりました。

Django Selectbox Button Disable 2

最後に

Django の管理サイトはほとんど実装なしで構築することができますが、デフォルトの状態だと使い勝手があまり良くないところもあるので今回のようなカスタマイズを行い、より使いやすい管理サイトを構築できるようになりたいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です