Django crispy forms inline checkboxes
Я использую Django-cripsy-forms для создания формы. У меня есть модель с несколькими атрибутами (MultiSelectField
) с одинаковыми вариантами выбора (CHOICES
).
from django.db import models
class Visit(models.Model):
CHOICES = (
("A","A"),
("B","B"),
("C","C"),
("D","D"),
)
q1 = MultiSelectField(null=True, choices=CHOICES, blank=True)
q2 = MultiSelectField(null=True, choices=CHOICES, blank=True)
q3 = MultiSelectField(null=True, choices=CHOICES, blank=True)
q4 = MultiSelectField(null=True, choices=CHOICES, blank=True)
q5 = MultiSelectField(null=True, choices=CHOICES, blank=True)
q6 = MultiSelectField(null=True, choices=CHOICES, blank=True)
Я хочу сделать форму с флажками для каждого выбора для всех атрибутов. Но чтобы избежать беспорядка, хочу, чтобы флажки были встроенными. Что-то вроде анкеты (пример ниже)
Я пытался использовать django-crispy-forms InlineCheckboxes, как показано ниже. Но чекбоксы никогда не отображались в строке. Но они отображаются так, как показано на рисунке ниже. Я также попробовал отредактировать стиль меток и входов отдельных чекбоксов, но это также не помогло. Что я делаю не так? И есть ли лучший способ сделать это?
from django import forms
from django.forms import ModelForm
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout
from crispy_forms.bootstrap import InlineCheckboxes
class VisitForm(ModelForm):
class Meta:
model = Visit
fields = '__all__'
widgets = {
'q1': forms.CheckboxSelectMultiple(),
'q2': forms.CheckboxSelectMultiple(),
'q3': forms.CheckboxSelectMultiple(),
'q4': forms.CheckboxSelectMultiple(),
'q5': forms.CheckboxSelectMultiple(),
'q6': forms.CheckboxSelectMultiple(),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout (
InlineCheckboxes("q1"),
InlineCheckboxes("q2"),
InlineCheckboxes("q3"),
InlineCheckboxes("q4"),
InlineCheckboxes("q5"),
InlineCheckboxes("q6"),
)
В html это выглядит следующим образом
<div id="div_id_signal" class="control-group">
<label for="id_signal" class="control-label">Q1</label>
<div class="controls">
<label class="checkbox inline" for="id_signal_0">
<input type="checkbox" name="signal" id="id_signal_0" value="A">
A
</label>
</div>
</div>