Возможно ли сопоставить поле с группой радиокнопок пользовательского шаблона?
Вопрос в заголовке.
У меня есть такая форма
class SelectTypeForm(forms.Form):
the_type = forms.CharField(max_length=100)
У меня есть пользовательский шаблон с группой радиокнопок. Как сделать так, чтобы поле получало выбранное значение?
Вы можете использовать встроенный виджет RadioSelect и передать путь к пользовательскому шаблону в аргументе template_name в определении поля формы.
Например:
from django import forms
class MyForm(forms.Form):
my_field = forms.ChoiceField(
widget=forms.RadioSelect(template_name='my_app/custom_radio_template.html'),
choices=(('option1', 'Option 1'), ('option2', 'Option 2')),
)
Тогда вы можете создать свой шаблон радиокнопки в my_app/templates/my_app/custom_radio_template.html и использовать переменную {{ forloop.counter }} для корректного вывода значений и меток радиокнопок.
Аргумент template_name не является допустимым аргументом для виджета RadioSelect. Вместо template_name следует использовать аргумент attrs.
class MyForm(forms.Form):
my_field = forms.ChoiceField(
widget=forms.RadioSelect(attrs={'template': 'my_app/custom_radio_template.html'}),
choices=(('option1', 'Option 1'), ('option2', 'Option 2')),
)
Вы также должны заметить, что значение attrs является словарем, а ключ 'template' не является допустимым атрибутом HTML.
class MyForm(forms.Form):
my_field = forms.ChoiceField(
widget=forms.RadioSelect(attrs={'class': 'custom-radio'}),
choices=(('option1', 'Option 1'), ('option2', 'Option 2')),
)
Затем в своем шаблоне вы можете использовать класс для нацеливания радиокнопок и применения пользовательских стилей или макетов.
{% for radio in form.my_field %}
<div class="custom-radio">
{{ radio }}
</div>
{% endfor %}
Важно отметить, что аргумент attrs передается виджету, поэтому он будет влиять на все отображаемые элементы, а не только на радиокнопки, поэтому вы должны использовать класс в вашем CSS для нацеливания только на радиокнопки.
Уходите от своего CharField
. Надеюсь, я правильно вас понял, и вы хотите иметь радио-кнопку-группу с несколькими вариантами. Каждый вариант представляет собой строку. Если пользователь решит нажать на вторую представленную радио-кнопку, то строка 'is_stored'
будет сохранена.
class SelectTypeForm(forms.Form):
choose_type = forms.ChoiceField(label='your type field', choices=(
('type_a', 'This string'),
('type_b', 'is stored'),
('type_c', 'if selected')
), widget=forms.RadioSelect, initial='type_b')
Если это не то, что вы имели в виду, пожалуйста, предоставьте ваш "пользовательский шаблон с группой радиокнопок".