Das Kontrollkästchen „BooleanField“ wird mit „crispy_forms“ unter Verwendung von Bootstrap nicht korrekt gerendert
-
20-12-2019 - |
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
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