Флажок BooleanField не отображается правильно с Crispy_forms с использованием начальной загрузки

StackOverflow https://stackoverflow.com//questions/22002861

Вопрос

Я использую 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top