mtbの学んだことのブログ

とあるPythonエンジニアのブログ

django adminはactionが追加できる

django adminの動きを見てる中で、actionの動きを学んだのでメモ。

django adminでは複数のレコードを選んで、アクションを実行できる。

f:id:mtb_beta:20180409203728p:plain

これ。

デフォルトでは、 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

f:id:mtb_beta:20180409204505p:plainこんな風に増える

実行すると、それらにupdateのクエリが発行される。

f:id:mtb_beta:20180409204715p:plain