Ответ 1
Я нашел простой способ сделать это. Это сработало для меня... Надеюсь, это поможет:
Что вам нужно сделать, так это "передать" выбранные элементы на страницу подтверждения и включить их в форму, а также включить <input type="hidden" name="action" value="admin_action" />
, чтобы администратор django знал, что он все равно должен вызвать admin action
. post
просто знать, обрабатывать ли запрос или отображать страницу подтверждения.
# Write your admin action.
# IMPORTANT: Note the context passed to TemplateResponse
from django.contrib.admin import helpers
from django.template.response import TemplateResponse
class MyModelAdmin(admin.ModelAdmin):
def admin_action(self, request, queryset):
if request.POST.get('post'):
# process the queryset here
else:
context = {
'title': _("Are you sure?"),
'queryset': queryset,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
}
return TemplateResponse(request, 'path/to/template.html',
context, current_app=self.admin_site.name)
# The template
{% extends "admin/base_site.html" %}
{% load i18n l10n %}
{% block content %}
<form action="" method="post">{% csrf_token %}
<p>The following videos will be accepted:</p>
<ul>{{ queryset|unordered_list }}</ul>
<div>
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" />
{% endfor %}
<input type="hidden" name="action" value="admin_action" />
<input type="hidden" name="post" value="yes" />
<input type="submit" value="{% trans "Yes, I'm sure" %}" />
</div>
</form>
{% endblock %}