Marco Ordoñez

Uso del widget multiselección de Django admin

Django tiene por defecto un widget simpático para la opción de multiselección, no hay mucha documentación al respecto para hacerlo funcionar asi que en este post les voy a contar como funcionó para mi.

Si buscamos en la documentación encontraremos lo siguiente:

If you like the widgets that the Django Admin application uses, feel free to use them in your own application! They’re all stored in django.contrib.admin.widgets.

Para usar el widget multiselección primero debemos obviamente incluirlo, el widget que buscamos para esta tarea es FilteredSelectMultiple.

from django.contrib.admin.widgets import *  

Luego debemos incluir los archivos js necesarios para darle la funcionalidad a la plantilla que utilicemos.

//Scripts
<script type="text/javascript" src="/jsi18n/"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/core.js"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/admin/RelatedObjectLookups.js"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/jquery.js"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/jquery.init.js"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/actions.js"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/SelectBox.js"></script>  
<script type="text/javascript" src="{{STATIC_URL}}/admin/js/SelectFilter2.js"></script>

//Styles
link rel="stylesheet" type="text/css" href="/static/admin/css/forms.css"/>  
[if lte IE 7]
link rel="stylesheet" type="text/css" href="/static/admin/css/ie.css"/>  

Luego debemos crear el field en nuestro form.

micampo = forms.MultipleChoiceField(choices=MIS_CHOICES,widget=FilteredSelectMultiple("NOMBRE",is_stacked=False))  

¿Porque usar este widget?

Se que hay buenas soluciones aparte, en mi caso fue solo por el hecho de tener soporte para IE7 y contar con un widget de aspecto decente que ya está integrado con Django.

Espero que les sea útil.

Marco Ordonez