Foros del Web » Programando para Internet » Python »

Agregando botones al {% submit_row %} en change_form.html en el panel de Django

Estas en el tema de Agregando botones al {% submit_row %} en change_form.html en el panel de Django en el foro de Python en Foros del Web. Este es un problema que se me presento hoy y como lo resolvi. Sucede que requería agregar un botón de Commit a un lado de ...
  #1 (permalink)  
Antiguo 09/06/2011, 02:53
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 13 años, 5 meses
Puntos: 10
Agregando botones al {% submit_row %} en change_form.html en el panel de Django

Este es un problema que se me presento hoy y como lo resolvi. Sucede que requería agregar un botón de Commit a un lado de Save pero en el template change_form.html no existe un bloque que por default pueda agregar elementos aun lado del {% submit_row %}. De hecho investigando encontre que es un Feature que se planea solucionar de alguna forma https://code.djangoproject.com/ticket/13875.

Existen algunas maneras de darle la vuelta sin modificar Django. La solución no es lo mas elegante.

En el change_form.html en /templates/admin/mymodel/

Código Django Template:
Ver original
  1. {% extends "admin/change_form.html" %}
  2. {% load i18n %}
  3.  
  4. {% block extrahead %}{{ block.super }}
  5.  
  6.  
  7. {% endblock extrahead %}
  8.  
  9. {% block after_field_sets %}{{ block.super }}
  10.  
  11. <input value="{% trans "Commit" %}"
  12.  class="move_to_submit_row" name="_commit" type="submit"/>
  13.  <script>
  14.      django.jQuery(document).ready(function() {
  15.          django.jQuery('.move_to_submit_row').insertBefore('.submit-row>input:first');
  16.      });
  17.  </script>
  18. {% endblock after_field_sets %}

Basicamente creo un botón igual y lo muevo con Jquery a donde debería de ir. Este botón tiene como atributo de nombre _commit y es tipo submit. Similar a _save y a los otros 2 botones.

Ahora en nuestro Admin.py sobre escribimos el método response_change para buscar que el request contenga dentro de Post un key "_commit" (el que definimos en el nombre del campo). Esto lo escribimos dentro de una clase de configuración del Administrador de Django. Ejemplo MyModelAdmin:

Código Python:
Ver original
  1. def response_change(self, request, obj):
  2.        
  3.         if request.POST.has_key("_commit"):
  4.             #  Aqui la magia
  5.             msg = (('The %(name)s "%(obj)s" has been Commited.') %
  6.                    {'name': str(obj._meta.verbose_name),
  7.                     'obj': str(obj)})
  8.             self.message_user(request, msg)
  9.             return HttpResponseRedirect("../%s/" % obj.pk)
  10.            
  11.            
  12.         return super(MyModelAdmin, self).response_change(request, obj)

Tambien agregué una forma con que sobre escribe clean que me permite validar y limpiar mis campos, pero eso puede ser opcional depende para que quieres el método.

El resultado :



Esto fue lo que yo hice ¿Qué sugieren ustedes?
  #2 (permalink)  
Antiguo 09/06/2011, 11:57
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Agregando botones al {% submit_row %} en change_form.html en el panel de D

No tengo nada que agregar: se ve bien, el código es claro, y está bueno que hayas publicado tu solución

Etiquetas: botones, django, panel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 5 personas




La zona horaria es GMT -6. Ahora son las 09:18.