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

问题描述

我正在使用python版本3.6.8和Django版本3.0.8。我在这个论坛上看到了很多与此主题相关的主题,但是有些答案却很旧。不知道该跟随哪一个。我尝试参考django官方文档,该文档准确地谈论了我想要自定义标记,从用于收音机选择的认ul / li标记到根据我的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','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 %}

解决方法

请像这样使用。这里考虑小部件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]是您的字段名称。