Admin de Django - Selección múltiple de lista separada por comas con checkboxes
Igor Támara
Senior Software EngineerQue tal
De las opciones:
"BLACK,BLUE,BROWN,CORAL,FUCSIA,GOLD,GREEN,GREY,IVORY,KHAKI,LIGHT BLUE,LIGHT BLUE WITH PINK,LIGHT BROWN,LIGHT PURPLE,LILA,NATURAL,NAVY,OLIVE,OLIVE GREEN,ONE COLOR ONLY,ORANGE,PEACH,PINK,PURPLE,RED,ROYAL BLUE WITH WHITE,SALMON,SILVER,TURQUOISE,WHITE,WHITE WITH WHITE,WINE,YELLOW"
poder elegir
"BLACK,GOLD,IVORY,LIGHT BLUE,PINK,SALMON"
- Ejemplo de uso de checkboxes en selección múltiple
Advertencia:
Esta entrada es para amantes de CSV y algo de minimalismo... Ojo, no minimalistas para el camino por recorrer si no más bien el resultado final.
Django trae un control maravilloso para relaciones muchos a muchos, cuando no se requiere crear una tabla para un conjunto controlado de opciones qué podríamos hacer?
No molestemos a nuestro SMBD con cosas pequeñas, dejémoslo trabajar en las relaciones que lo ameritan. Sobre todo sabiendo que esta lista de opciones no van a cambiar muy a menudo.
Con esto en mente, qué tal tener una lista de opciones controlada pero de la cual se pueda elegir varias opciones?
Para esta solución se requerirá:
- Lista de opciones : separada por comas!!!!!
- Un ModelField nuevo: Dado que vamos a guardar nuestras opciones como una lista separada por comas. Así la base de datos no tiene que crecer en tablas.
- Un Widget: Para desplegar como lo deseamos
- Un Form Field: Para que el formulario sepa qué hacer
- Un pequeño tweak para south(Si no lo estás usando, qué estás usando para tus migraciones?)
Lista de opciones
ModelField" class="redactor-autoparser-object">https://gist.github.com/362918... para guardar valores separados por coma
Un widget con clase
Si, el widget únicamente hereda de aquellos hechos inteligentemente, la única diferencia es que se le añade una clase.El" class="redactor-autoparser-object">https://gist.github.com/362929... FormField apropiado
Originalmente puede encontrar este FormField aquí, por completitud lo colocamos en esta entrada a continuación, cabe notar que hemos usado el widget que acabamos de mostrar:
Como" class="redactor-autoparser-object">https://gist.github.com/362926... puede verse, en _get_choices incluso podemos recibir una función :)
Para usuarios de South
Si estamos usando south, no podemos olvidar:
Esto" class="redactor-autoparser-object">https://gist.github.com/362931... se puede colocar en el models.py , para que south sepa qué hacer entre migración y migración.
Y ahora, qué hay que hacer en admin.py?
NADA!!!!
Disfrutar de aquí en adelante la oportunidad de contar con las opciones múltiples a partir de una lista separada por coma.
Documentación relacionada
Written by Igor Támara
A seasoned developer, Igor brings expertise in designing and building complex software systems. With a focus on quality and performance, they lead projects that drive innovation and deliver reliable solutions to meet user needs.