2011-05-09 45 views
9

HIAlinear los botones de radio horizontalmente en formularios django

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 de antemano

+2

creo que esto es más un problema de CSS de Django. Puede agregar una clase a los botones de opción y decir flotante: izquierda; en tu css para la clase de botón de radio. –

+1

Lo he buscado en Google y he encontrado un enlace donde no pude hacerlo funcionar. https://wikis.utexas.edu/display/~bm6432/Django-Modifying+RadioSelect+Widget+to+have+horizontal+buttons. Intentaré agregar el CSS y le diré si lo soluciona. gracias geekam – vkrams

Respuesta

22

Eso es el comportamiento de la RadioField. Si quieres que vuelve horizontal, crear 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), 
           ) 
+0

Oye lakshman, cuando ejecuto el código anterior, su error de obtención 'mark_safe' no está definido. Si puede ayudar esto, sería una gran ayuda – vkrams

+0

Debe importarlo de Django.templates –

+1

Enfriar su buen trabajo laxman. Gracias por la ayuda :-) para mark_safe para trabajar he importado: 'from django.utils.safestring import mark_safe' – vkrams

1

forms.RadioSelect modificación:

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

Trabajar con el Python 3.4 con el administrador del standart Django 1,10 enter image description here

y el Django-Traje (http://djangosuit.com/) (se utiliza Bootstrap`s 2 estilos)

enter image description here

No se ha probado para el Django-Grappelli, todavía.

1

De acuerdo con the Django docs 'attrs' es un diccionario que contiene los atributos HTML que se establecerán en el widget representado.

Con esto en mente una solución simple basada forma sería algo como lo siguiente:

feature_type = forms.TypedChoiceField(
    choices = formfields.FeatureType, 
    widget = forms.RadioSelect(attrs={ 
     'display': 'inline-block' 
    }) 
) 
Cuestiones relacionadas