Можете ли вы добавить параметры в пользовательские действия администратора Django?

Например (не случай, а просто для иллюстрации), если я хотел добавить действие, чтобы установить определенное поле в выбранных элементах в X. Можно ли добавить действие, чтобы позволить вводить X в противоположность жестко закодированный?

Ответы

Ответ 1

Смотрите: Действия, которые предоставляют промежуточные страницы

Вы не можете сделать это правильно со страницы списка изменений, но на промежуточной странице вы можете иметь форму, которая позволит пользователю ввести значение, а затем использовать это значение для действия.

Ответ 2

Это возможно с Django 1.5, хотя его немного хаки. Я не уверен, что другие более старые версии Django это возможно.

Вы пишете свой собственный подкласс ModelAdmin. ModelAdmin имеет атрибут action_form, который определяет форму, показанную до кнопки Go на странице списка изменений. Вы можете написать свою собственную форму и установить ее как action_form в подклассе ModelAdmin.

from django.contrib.admin.helpers import ActionForm
# ActionForm is the default form used by Django
# You can extend this class

class XForm(ActionForm):
    x_field = forms.CharField()


class YourModelAdmin(admin.ModelAdmin):
    action_form = XForm

С этими изменениями вы получите CharField, где вы можете поместить значение для X.

И используйте x_field в своей функции действий.

def set_x_on_objects(modeladmin, request, queryset):
    for obj in queryset:
        obj.something = request.POST['x_field']
    # do whatever else you want

class YourModelAdmin(admin.ModelAdmin):
    action_form = XForm
    actions = [set_x_on_objects]