前置き
サイト構築で試行錯誤していると、データにまとめて同じ操作を行いたい場面がちょこちょこ出てきます。デフォルトでは削除のみが用意されているので、それ以外の操作を行いたい場合は自分で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からオブジェクトを読み込むことで、データを変更する操作が可能です。
まとめ
なにか分かりづらかったり、誤っていたらコメントの方へお願いします。集合知に感謝。