moxt

Just another Blog site

djangoのadmin画面で動的にactionを追加する

   

djangoにはadmin画面上で複数選択したアイテムを削除したり、アイテムの状態を変更するためのActionという機能がある
このActionを追加するよくある方法は下記の通り。

actionsにメソッド名を詰めた配列を渡せばOK。

基本的には上記の方法で全く問題ない。
けど、似たような処理なんだがちょっとだけ違う処理を一気に定義したいときがある。

例えば、選択したアイテムに『◯◯』というタグを付与する操作ですかね。

『◯◯』が『イヌ』だったり『ネコ』だったりと付けたいタグ名は異なるが実装的にやってることはほとんど変わらないじゃないか、っていうヤツ。
先に挙げたよくある方法でタグ付けActionを実現しようとすると、チクチク関数を定義して、actionsにメソッド名を詰めないといけない。
まあ…コピペでも良いけど、ちょっと面倒です。

というわけで、Actionを配列にベタ書きせずに動的(表現として正しくない?)に追加する方法をインターネットで発見したのでメモしておく。

https://lukeplant.me.uk/blog/posts/dynamically-generated-django-admin-actions/
↑これ見れば終わり。

get_actionsというメソッドを拡張して、actionsにメソッドやらを含んだタプルを詰める。
Actionを生成する関数は別途用意してる。

イヌとネコのタグ付けActionをまとめてやる場合は下記の通り。

get_actionsで好きなように編集できるところが良い。

 - Python

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

Django Wizardでプレビュー画面を作りたい

複数ページからなる入力フォーム画面を作りたいときにはDjangoWizardの出番だ。 基本的な使い方は公式のドキュメントでだいたい分かる。 …

PythonでEnumに状態を追加する

この辺読めば終わり。 https://docs.python.org/3/library/enum.html#planet …

falconでOpenCV使おうとしてハマった

falcon側で受け取ったPOSTリクエストから画像ファイルを取り出し、OpenCV用のオブジェクトに変換したかった。 素のリクエストから画像を取り出そうとしてみたけど、どうも上手くとれずに苦戦してた。 …

DjangoアプリをCapistrano使ってデプロイする

Railsアプリでデプロイする、といえばCapistranoが定番感ある。 ではDjangoの場合はどうなんだ。 …