始めに
今回はDjangoの管理画面にアクションを追加する方法について書いていきます。
デフォルトではレコードの削除アクションしかないので、それ以外で何かアクションが欲しい場合は自分で作成しなくてはなりません。
それにしてもDjangoの管理画面は拡張性があって素晴らしいです。
このやり方を覚えてしまえば管理側の機能実装にも役に立つかなと思います!
その前に本記事が指している管理画面のアクションですが、下記画像の赤枠の部分になります。
それでは実際に選択したユーザーに対してメール送信を行うアクションを想定して追加していきたいと思います。
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 = '選択したレコードに対してメール送信する'
動作確認
まずは管理画面の該当モデルの画面へ移動します。
アクションの選択リストを開いてください。
以下のように項目が追加されているかと思います。
確認出来たらリストから選択して「実行」ボタンを押下してみましょう。
コンソールに「メール送信しました」のテキストが表示されているかと思います。
ここまで出来たら実際にメール送信の実装をしていくことができるようになりました。
ちなみにsend_mail_actionメソッドの第3引数にのquerysetには選択したモデルが格納されているのでそこからメールアドレスを抜き出して送信することができます。
それ以外の何かしらのアクションの場合でも同じような手順で行うことが可能です。