•  
  • 1
  •  
0

Как сделать несколько однотипных действий в admin actions?

Обнаружил в django 1.1, в админке классную шутку называемую admin actions и сразу решил засунуть туда кучу однотипных действий:

actions_ar=[]
for action in ActionsModel.objects.all():
    def action_funk(modeladmin, request, queryset):
        obj=queryset[0]
        queryset.update(something=action.something)
    action_funk.short_description=action.name
    actions_ar.append(action_funk)

А потом добавил массив с функциями экшенов( actions_ar ) в класс админки.

class SomeAdmin(admin.ModelAdmin):
    actions = actions_ar

Но в итоге я вижу в админке, в actions только один action(тот у кого id меньше, видимо), что я сделал не так?

python, django, admin actions, array.
спросил 839 дней назад Аватор пользователя rnd_d rnd_d
102 7
300

1 ответ:

    •  
    • 1
    •  

    Думаю, здесь нужно использовать callables:

    class ActionCallable(object):        
        def __init__(self, *args, **kwargs):
            self.args = args
            self.kwargs = kwargs
    
        def __call__(self, modeladmin, request, queryset):
            obj=queryset[0]
            queryset.update(*self.args, **self.kwargs)
    
    actions_ar=[]
    for action in ActionsModel.objects.all():
        action_func = ActionCallable(something=action.something)
        action_func.short_description=action.name
        actions_ar.append(action_func)
    
    ответил 839 дней назад Аватор пользователя pingw33n pingw33n
    195 3
Чтобы написать ответ, вы должны авторизироваться.