更改 RadioSelect django 小部件的默认标记

Changing the default markup of the RadioSelect django widget

我正在使用 python 版本 3.6.8 和 django 版本 3.0.8。我在这个论坛上看到了很多与此相关的主题,但有些是非常古老的答案。不确定要遵循哪一个。我尝试参考 django 官方文档,它确切地讨论了我想要从默认的 ul/li 标记自定义的标记,用于无线电 select 到我自己的样式 css。不知道我错过了什么。任何人都可以帮助我如何在我使用的 django 版本中实现这一目标。提前致谢。

Django 官方文档:

https://docs.djangoproject.com/en/3.0/ref/forms/widgets/#radioselect

当我尝试执行此操作时出现错误:模板渲染期间出错 'ChoiceField' 对象不可迭代

forms.py代码如下:

from django import forms

class ContactUsForm(forms.Form):

    name = forms.CharField(label='Name',
            widget=forms.TextInput(attrs={'class' : 'form__input', 'placeholder' : 'Name'}))
    email = forms.EmailField(label='Email',
            widget=forms.EmailInput(attrs={'class' : 'form__input', 'placeholder' : 'Email'}))
    mobile = forms.CharField(label='Mobile',
            widget=forms.TextInput(attrs={'class' : 'form__input', 'placeholder' : 'Mobile', 'type' : 'tel'}))
    message = forms.CharField(label='Message', widget=forms.Textarea(attrs={'class' : 'form__input',
        'placeholder' : 'Message', 'rows' : "4" , 'cols' : '50'}))

    CHOICES = [
            ('1', 'New Projects'),
            ('2', 'Interiors'),
            ('3', 'Land Resale'),
            ('4', 'Joint Venture'),
            ('5', 'Renovation'),
            ('6', 'Others'),
    ]

    cat_field = forms.ChoiceField(widget=forms.RadioSelect(attrs={'class' : 'form__radio-input', 'name' : 'services'}),
            choices=CHOICES)

我在模板中使用的模板标签如下:

 {% for radio in form.fields.cat_field %}
   <div class="myradio">
    {{ radio }}
   </div>
 {% endfor %}

请像this.Here一样使用我们考虑的小部件input type。类型是radio然后做点什么。

{% for field in form.visible_fields %}
    <li>
        {% if field.field.widget.input_type == 'radio' %}
            <div class="myradio">
                {{ radio }}
            </div>
        {% endif %}
    </li>
{% endfor %}

用于打印您的小部件类型

{{ [FIELD].field.widget.input_type }}

[FIELD] 是您的字段名称。