django-crispy-forms:垂直对齐按钮与字段

django-crispy-forms: Align button with fields vertically

我一直在努力使用 django-crispy-forms 在一行中获取我的表单(包括按钮)。

我最终找到了解决方案,但我决定将问题与答案一起发布,以防其他人遇到同样的问题。

forms.py中的代码如下:

class SearchForm(forms.Form):
    [...]

    def __init__(self, *args, **kwargs):
        super(SearchForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_class = 'form-inline'

        self.helper.layout = Layout(
                    Field('From', placeholder='From'),
                    Field('To', placeholder='To'),
                    Field('Date', placeholder='Date'),
                    ButtonHolder(Submit('submit', 'Search', css_class='btn btn-primary'))
        )

但是按钮出现在第二行。

我试过替代方案

self.helper.form_class = 'form-horizontal'

但没有区别。

我找到了基于 this post in github 的解决方案。

也就是使用FormActions对象适配Layout:

self.helper.layout = Layout(
            Field('From', placeholder='From'),
            Field('To', placeholder='To'),
            Field('Date', placeholder='Date'),
            FormActions(ButtonHolder(Submit('submit', 'Search', css_class='btn btn-primary')))
        )

并且所有字段和按钮都完美对齐: