django adminの動きを見てる中で、actionの動きを学んだのでメモ。
django adminでは複数のレコードを選んで、アクションを実行できる。
これ。
デフォルトでは、 Delete select my models
みたいなやつが設定されている。
選択したレコードを削除するアクション。
これは無効化できるらしい。
ドキュメントのままだけど。
Admin actions | Django documentation | Django
from django.contrib import admin from myapp.models import MyModel class MyModelAdmin(admin.ModelAdmin): def get_actions(self, request): actions = super().get_actions(request) if request.user.username[0].upper() != 'J': if 'delete_selected' in actions: del actions['delete_selected'] return actions admin.site.register(MyModel, MyModelAdmin)
あと、自分でアクションを設定することもできる。
以下は、 my_action
というアクションを追加した例
class MyModelAdmin(admin.ModelAdmin): actions = ['my_action'] def my_action(self, request, queryset): queryset.update(title='action')
Admin actions | Django documentation | Django
こんな風に増える
実行すると、それらにupdateのクエリが発行される。