tutorial - django forms widgets
Alinee los botones de radio horizontalmente en formularios django (3)
HOLA
Quiero alinear los botones de radio horizontalmente. Por defecto, los formularios django se muestran en formato vertical.
feature_type = forms.TypedChoiceField(choices = formfields.FeatureType, widget = forms.RadioSelect)
¿Hay algún parámetro especial que podamos aprobar para la alineación de botones de radio?
Gracias por adelantado
Ese es el comportamiento de RadioField
. Si desea que se represente horizontalmente, cree un renderizador horizontal, como algo de la siguiente manera:
from django.utils.safestring import mark_safe
class HorizontalRadioRenderer(forms.RadioSelect.renderer):
def render(self):
return mark_safe(u''/n''.join([u''%s/n'' % w for w in self]))
class ApprovalForm(forms.Form):
approval = forms.ChoiceField(choices=APPROVAL_CHOICES,
initial=0,
widget=forms.RadioSelect(renderer=HorizontalRadioRenderer),
)
Formularios modificados.RadioSelect:
class HorizontalRadioSelect(forms.RadioSelect):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
css_style = ''style="display: inline-block; margin-right: 10px;"''
self.renderer.inner_html = ''<li '' + css_style + ''>{choice_value}{sub_widgets}</li>''
Trabajando con Python 3.4 con el administrador estándar de Django 1.10
y el Django-Suit ( http://djangosuit.com/ ) (usa los 2 estilos de Bootstrap)
No probado para el Django-grappelli, todavía.
De acuerdo con los documentos de Django ''attrs'' es un diccionario que contiene los atributos HTML que se establecerán en el widget representado.
Con eso en mente, una solución simple basada en formularios sería algo como lo siguiente:
feature_type = forms.TypedChoiceField(
choices = formfields.FeatureType,
widget = forms.RadioSelect(attrs={
''display'': ''inline-block''
})
)