使用bootstrap,使用crispy_forms无法正确呈现BooleanField复选框

Joe*_*nes 5 forms django checkbox django-crispy-forms twitter-bootstrap-3

我正在使用crispy_forms和FormHelper.我有一个模型字段声明为:

active = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)

在我的ModelForm中,我在我的布局中尝试了以下两种方法:

    self.helper.layout = Layout(
                    ...
        InlineCheckboxes('active'),
        Field('active'),
                    ...
Run Code Online (Sandbox Code Playgroud)

两者都没有提供所需的结果:

请参阅图片链接

在使用InlineCheckboxes时,我没有看到复选框并仅使用Field,它的格式不正确.

请帮忙

bow*_*eeb 6

以下是Crispy Forms文档的"Bootstrap Layout对象"部分的链接.

InlineCheckboxes:它使用内联复选框呈现Django forms.MultipleChoiceField字段

InlineCheckboxes不适合您的模型的字段类型.


实现你正在寻找的东西的一种hacky方法是使用PrependedText空字符串作为text参数.

...
PrependedText('active', ''),
...
Run Code Online (Sandbox Code Playgroud)

检查源看起来默认情况下,布尔字段会在<input>标记内部呈现<label>标记.使用上面的黑客,"活跃"停留在<label><input>放在在你期望:在<div>与"控制" CSS类.比较以下内容:

PrependedText('active', ''):

  <div id="div_id_active" class="form-group">
    <label for="id_active" class="control-label">Active</label>

    <div class="controls">
      <div class="input-group">
        <input type="checkbox" name="active" class="checkboxinput" id="id_active" />
      </div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

Field('active'):

  <div class="form-group">
    <div id="div_id_active" class="checkbox">
      <div class="controls">
        <label for="id_active" class=""><input type="checkbox" name="active" class=
        "checkboxinput checkbox" id="id_active" /> Active</label>
      </div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

更新

我已经确认这是在django-crispy-forms的dev分支中修复的.

参考此提交:5c3a268

这个github问题:#267