Das Kontrollkästchen „BooleanField“ wird mit „crispy_forms“ unter Verwendung von Bootstrap nicht korrekt gerendert

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

Frage

Ich verwende Crispy_forms und FormHelper.Ich habe ein Modellfeld wie folgt deklariert:

active = models.BooleanField(default=True)

Und in meinem ModelForm habe ich beides in meinem Layout ausprobiert:

    self.helper.layout = Layout(
                    ...
        InlineCheckboxes('active'),
        Field('active'),
                    ...

die beide nicht das gewünschte Ergebnis liefern:

Bitte sehen Bildlink

Wenn ich InlineCheckboxes verwende, sehe ich das Kontrollkästchen nicht und wenn ich nur Field verwende, ist es nicht richtig formatiert.

Bitte helfen Sie

War es hilfreich?

Lösung

Hier ist das Verknüpfung zum Abschnitt „Bootstrap-Layout-Objekte“ der Crispy Forms-Dokumentation.

Inline-Kontrollkästchen:Es rendert ein Django-Formulars.MultipleChoiceField-Feld mithilfe von Inline-Kontrollkästchen

InlineCheckboxes ist für den Feldtyp Ihres Modells nicht geeignet.


Eine knifflige Möglichkeit, das zu erreichen, was Sie suchen, ist die Verwendung von PrependedText mit einer leeren Zeichenfolge für die text Streit.

...
PrependedText('active', ''),
...

Bei der Untersuchung der Quelle scheint es, dass ein boolesches Feld standardmäßig das rendert <input> Tag innerhalb der <label> Etikett.Mit dem obigen Hack bleibt „Aktiv“ im <label> und das <input> wird dort platziert, wo Sie es erwarten würden:in einem <div> mit der CSS-Klasse „control“.Vergleichen Sie Folgendes:

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>

Aktualisieren

Ich habe bestätigt, dass dies im Entwicklungszweig von Django-Crispy-Forms behoben ist.

Verweisen Sie auf dieses Commit: 5c3a268

Und dieses Github-Problem: #267

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top