widgets tutorial formmodel form fields example crispy django forms radio-button alignment

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'' }) )