Esto es lo que terminé haciendo.
En primer lugar, me extendió la change_view del objeto ModelAdmin de la siguiente manera:
def change_view(self, request, object_id, extra_context=None):
actions = self.get_actions(request)
if actions:
action_form = self.action_form(auto_id=None)
action_form.fields['action'].choices = self.get_action_choices(request)
else:
action_form = None
changelist_url = urlresolvers.reverse('admin:checkout_order_changelist')
return super(OrderAdmin, self).change_view(request, object_id, extra_context={
'action_form': action_form,
'changelist_url': changelist_url
})
Básicamente sólo estamos reuniendo los datos necesarios para poblar las acciones desplegable de la vista del cambio.
Entonces sólo extendieron change_form.html para el modelo en cuestión:
{% extends "admin/change_form.html" %}
{% load i18n adminmedia admin_list %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/changelists.css" />
{% endblock %}
{% block object-tools %}
{{ block.super }}
<div id="changelist">
<form action="{{ changelist_url }}" method="POST">{% csrf_token %}
{% admin_actions %}
<input type="hidden" name="_selected_action" value="{{ object_id }}">
</form>
</div>
{% endblock %}
Esto es casi idéntica a la forma en la sección de acciones de administración se emite en la vista de lista de cambios. Las principales diferencias son: 1) Tuve que especificar una URL para el formulario para publicar, 2) en lugar de una casilla de verificación para especificar qué objeto (s) se debe cambiar, el valor se establece a través de un campo de formulario oculto, y 3) Incluí el CSS para la vista de lista de cambios y pegué las acciones en un div con id. De #changelist
, solo para que el cuadro parezca medio aceptable.
No es una gran solución, pero funciona bien y no requiere configuración adicional para acciones adicionales que pueda agregar.
Gracias. Terminé publicando mi propia solución, pero tu comentario en realidad me ayudó a darme cuenta de que solo necesitaba absorberlo y extender esa plantilla. – jsdalton