1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Django】管理サイトに自作した操作を追加する方法

Posted at

前置き

サイト構築で試行錯誤していると、データにまとめて同じ操作を行いたい場面がちょこちょこ出てきます。デフォルトでは削除のみが用意されているので、それ以外の操作を行いたい場合は自分でadmin.pyを編集する必要があります。少し手こずったので、備忘録代わりに記録しておきます。

参考にさせていただいたサイト

コード

以下のようなモデルを想定します。私が実際に使っているモデルを簡易化したものです。

models.py
class EnglishWord(models.Model):
    # 英語のスペル
    spell = models.CharField(max_length=30)
    # 難易度
    difficulty = models.IntegerField(default=0)

difficultyはユーザ側の行動により随時変化していきます。ここで、テストであれこれ弄ったデータをまとめてデフォルトの状態、すなわち0に戻す操作を追加します。

管理サイトの操作は、admin.pyで設定します。

admin.py
class EnglishWordAdmin(admin.ModelAdmin):
    # 自作した操作を追加
    actions = ['make_english_words_difficulty_zero']

    # 自作した操作
    def make_english_words_difficulty_zero(self, request, queryset):
        for english_word in queryset:
            english_word.difficulty = 0
            english_word.save()
    # 管理サイト上での表示を決定
    make_english_words_difficulty_zero.short_description = "英語の難易度を0にリセット"

クラス内に追加したい操作を関数として書いて、actionsに登録。同時に管理サイト上でどのように表示するかを.short_descriptionで決定します。また、querysetからオブジェクトを読み込むことで、データを変更する操作が可能です。

まとめ

なにか分かりづらかったり、誤っていたらコメントの方へお願いします。集合知に感謝。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?