Sassyブログ

好きなことで暮らしを豊かにするブログ

Djangoの管理画面(/admin)にアクションを追加する方法

始めに

今回はDjangoの管理画面にアクションを追加する方法について書いていきます。

デフォルトではレコードの削除アクションしかないので、それ以外で何かアクションが欲しい場合は自分で作成しなくてはなりません。

それにしてもDjangoの管理画面は拡張性があって素晴らしいです。

このやり方を覚えてしまえば管理側の機能実装にも役に立つかなと思います!

その前に本記事が指している管理画面のアクションですが、下記画像の赤枠の部分になります。

f:id:y_saiki:20210714140504p:plain

それでは実際に選択したユーザーに対してメール送信を行うアクションを想定して追加していきたいと思います。

admin.site.register()に渡しているモデル拡張する

まずは実装したコードを掲載します。

from django.contrib import admin
from django.urls import path
from .models import User
from django.shortcuts import redirect

@admin.register(User)
class UserAdmin(admin.ModelAdmin):

    def send_mail_action(self, request, queryset):
        print('メール送信しました')
        return redirect('/admin/users/user')

    actions = ['send_mail_action']

    send_mail_action.short_description = '選択したレコードに対してメール送信する'

django.contrib.adminモジュールを使用して、ModelAdminを継承したサブクラスを作成してください。

クラスの先頭にregisterデコレータを付与して対象のモデルを渡します。

アクションを呼び出せるようにする

「実行」ボタンを押下したときに呼ばれるメソッドの定義の追加します。

とりあえず、ここは擬似的にメール送信処理を行うという意味でprint関数を使ってコンソールに表示することとします。

def send_mail_action(self, request, queryset):
    print('メール送信しました')
    return redirect('/admin/users/user')

actionsフィールドに配列でメソッド名の文字列を要素に追加します

actions = ['send_mail_action']

.short_descriptionにアクション名を代入することで管理画面のリスト項目に追加されます。

send_mail_action.short_description = '選択したレコードに対してメール送信する'

動作確認

まずは管理画面の該当モデルの画面へ移動します。

アクションの選択リストを開いてください。

以下のように項目が追加されているかと思います。

f:id:y_saiki:20210714181038p:plain

確認出来たらリストから選択して「実行」ボタンを押下してみましょう。

コンソールに「メール送信しました」のテキストが表示されているかと思います。

ここまで出来たら実際にメール送信の実装をしていくことができるようになりました。

ちなみにsend_mail_actionメソッドの第3引数にのquerysetには選択したモデルが格納されているのでそこからメールアドレスを抜き出して送信することができます。

それ以外の何かしらのアクションの場合でも同じような手順で行うことが可能です。

最後に