使用 bootstrap,BooleanField 复选框无法通过 Cripy_forms 正确呈现
-
20-12-2019 - |
题
我正在使用 Cripy_forms 和 FormHelper。我有一个模型字段声明为:
active = models.BooleanField(default=True)
在我的 ModelForm 中,我在布局中尝试了以下两项:
self.helper.layout = Layout(
...
InlineCheckboxes('active'),
Field('active'),
...
两者都没有提供所需的结果:
请参见 图片链接
使用 InlineCheckboxes 时,我看不到复选框并且仅使用 Field,它的格式不正确。
请帮忙
解决方案
这里是 关联 到 Crispy Forms 文档的“Bootstrap 布局对象”部分。
内联复选框:它使用内联复选框呈现 Django forms.MultipleChoiceField 字段
InlineCheckboxes 不适合您模型的字段类型。
实现您正在寻找的目标的一种巧妙方法是使用 PrependedText
带有一个空字符串 text
争论。
...
PrependedText('active', ''),
...
检查源代码,默认情况下,布尔字段会呈现 <input>
标签里面的 <label>
标签。使用上面的技巧,“Active”保留在 <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>
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>
更新
我已经确认这已在 django-crispy-forms 的 dev 分支中修复。
参考这个提交: 5c3a268
还有这个 github 问题: #267
不隶属于 StackOverflow