Возможно ли сопоставить поле с группой радиокнопок пользовательского шаблона?

Вопрос в заголовке.

У меня есть такая форма

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')

Если это не то, что вы имели в виду, пожалуйста, предоставьте ваш "пользовательский шаблон с группой радиокнопок".

Вернуться на верх