Django Crispy Form с элементом Toggle switch
Я использую Crispy Forms и layout helper для создания формы ввода. Я хочу добавить в форму переключатель.
forms.py:
class RequestForm(forms.ModelForm):
on_prem = forms.CharField(widget=forms.CheckboxInput(attrs={"class": "slider form-control"}))
class Meta:
model = Request
fields = ['on_prem']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.layout = Layout(
Div(
Div(Field('on_prem'), css_class='col-md-3', ),
css_class='row',
),
)
models.py:
class Request(models.Model):
on_prem = models.BooleanField(default=False)
form.html
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{% crispy form %}
<button type="submit" class="d-block btn btn-outline-inverse mt-4 w-50 mx-auto">
Save Request
</button>
</form>
Я видел в документации Bootstrap, что желаемый эффект переключения достигается с помощью вложенных классов css, и я не уверен, как достичь этого с помощью помощника формы. Любая помощь будет очень признательна.
Мне удалось добиться этого, используя HTML блоки в помощнике.
form.py
class RequestForm(forms.ModelForm):
on_prem = forms.CharField(widget=forms.CheckboxInput(attrs={"class": "slider form-control"}))
class Meta:
model = Request
fields = ['on_prem']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.layout = Layout(
Div(
Div(
HTML('<label class="form-check-label" for="on_prem">On Prem</label>'),
HTML('<div class="form-switch">'),
Field('on_prem'),
HTML('</div>'),css_class='col-md-3',),
css_class='row',
),
)
Меньше строк кода просто используя "Field":
self.helper.layout = Layout(
Field('notify_faculty_field', css_class="form-check-input", wrapper_class="form-check form-switch"),
)