Выравнивание переключателей по горизонтали в формах django

привет

Я хочу, чтобы выровнять кнопки по горизонтали. По умолчанию django forms отображается в вертикальном формате.

feature_type  = forms.TypedChoiceField(choices = formfields.FeatureType, widget = forms.RadioSelect)

есть ли какой-либо специальный параметр, который мы можем передать для выравнивания переключателей?

спасибо заранее

3 ответов


это поведение RadioField. Если вы хотите, чтобы он отображался горизонтально, создайте горизонтальный визуализатор, например:

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),
                                 )

модифицированных форм.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>'

работа с Python 3.4 со стандартным администратором Django 1.10 enter image description here

и Джанго-костюм(http://djangosuit.com/) (использовать 2 стили Bootstrap В.)

enter image description here

еще не протестирован для Django-grappelli.


по данным документы Django 'attrs' - это словарь, содержащий атрибуты HTML, которые будут установлены в отображаемом виджете.

имея это в виду, простое решение на основе формы будет примерно следующим:

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