Флажок BooleanField не отображается правильно с Crispy_forms с использованием начальной загрузки
-
20-12-2019 - |
Вопрос
Я использую Crispy_forms и FormHelper.У меня есть поле модели, объявленное как:
active = models.BooleanField(default=True)
И в моей ModelForm я попробовал в своем макете оба следующих варианта:
self.helper.layout = Layout(
...
InlineCheckboxes('active'),
Field('active'),
...
которые оба не дают желаемого результата:
Пожалуйста, посмотри ссылка на изображение
При использовании InlineCheckboxes я не вижу флажок, а при использовании только поля он форматируется неправильно.
Пожалуйста помоги
Решение
Здесь связь в раздел «Объекты макета начальной загрузки» документации Crispy Forms.
Встроенные флажки:Он отображает поле Django form.MultipleChoiceField с использованием встроенных флажков.
InlineCheckboxes не подходит для типа поля вашей модели.
Хакерский способ добиться того, что вы ищете, - использовать PrependedText
с пустой строкой для text
аргумент.
...
PrependedText('active', ''),
...
При изучении источника выясняется, что логическое поле по умолчанию отображает <input>
тег внутри <label>
ярлык.Используя приведенный выше хак, «Активный» остается в <label>
и <input>
помещается там, где вы ожидаете:в <div>
с классом CSS «control».Сравните следующее:
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.
Ссылка на этот коммит: 5c3a268
И эта проблема с github: #267