Можете ли вы добавить параметры в пользовательские действия администратора 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]