Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django表单的选择中呈现选项?_Django_Python 3.x_Django Forms_Materialize - Fatal编程技术网

如何在Django表单的选择中呈现选项?

如何在Django表单的选择中呈现选项?,django,python-3.x,django-forms,materialize,Django,Python 3.x,Django Forms,Materialize,我想用Django呈现两个选择(一个是多重选择,另一个是简单选择),并用Materialize对其进行定制。我成功地编写了以下代码: 在我的表格里 class ZonesForm(forms.Form): zones_options = ( (1, 'Zone 1'), (2, 'Zone 2'), (3, 'Zone 3'), (4, 'Zone 4') ) zones = forms.MultipleCh

我想用Django呈现两个选择(一个是多重选择,另一个是简单选择),并用Materialize对其进行定制。我成功地编写了以下代码:

在我的表格里

class ZonesForm(forms.Form):
    zones_options = (
        (1, 'Zone 1'),
        (2, 'Zone 2'),
        (3, 'Zone 3'),
        (4, 'Zone 4')
    )
    zones = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=zones_options)

    conn_options = (
        (1, 'ABCDE'),
        (2, 'FGHIJ'),
    )
    connections = forms.ChoiceField(choices=conn_options)
在my zones.html中

{% block content %}
<div class="container">
    <div class="row">
        <form method="post">
            <div class="input-field col s6">
                <select multiple name="{{ form.zones.name }}">
                    {% for opt in form.zones %}
                        <option value="{{ opt.id }}">{{ opt.label }}</option>
                    {% endfor %}
                </select>
                <label>Zones</label>
            </div>
            <div class="input-field col s6">
                <select name="form.connections.name">
                    {% for opt in form.connections %}
                        <option value="{{ opt.id }}">{{ opt }}</option>
                    {% endfor %}
                </select>
                <label>Connection</label>
            </div>
        </form>
    </div>
</div>
{% endblock %}
{%block content%}
{%用于选择加入form.zones%}
{{opt.label}}
{%endfor%}
地带
{%用于opt-in form.connections%}
{{opt}}
{%endfor%}
联系
{%endblock%}
我的问题是:当呈现页面时,第一次选择(如预期的那样)会有4个复选框,并且没有名称(所有选项都为空)。对于第二个选择,我得到4个选项(一个空白,一个带有'ABCDE',一个空白,一个带有'FGHIJ')

我怀疑问题出在属性上。我没有为它们获取正确的值(我尝试了opt.label、opt.text、opt.choices、opt.value、opt…)。如何正确访问它们


另一个问题:有没有一种很好的调试方法?我是Django和web开发人员的新手。我尝试导入pdb;pdb.set_trace()进行调试,但我无法通过断点来浏览其他方法(我使用的是PyCharm)。

我设法解决了这个问题,如果有人遇到类似问题,我会发布这个答案

对于第一个选择,在forms.py中,我将
widget=forms.CheckboxSelectMultiple
替换为
widget=forms.SelectMultiple
。令人惊讶的是,复选框被正确呈现。我不确定
复选框SelectMultiple
SelectMultiple
之间有什么区别,但后面的选项有效=)

对于这两种情况,我都必须更改zones.html。现在看起来是这样的:

{% block content %}
<div class="container">
    <div class="row">
        <form method="post">
            <div class="input-field col s6">
                {{ form.zones }}
                <label>Zones</label>
            </div>
            <div class="input-field col s6">
                {{ form.connections }}
                <label>Connection</label>
            </div>
        </form>
    </div>
</div>
{% endblock %}
{%block content%}
{{form.zones}}
地带
{{form.connections}}
联系
{%endblock%}

我设法解决了这个问题,我正在发布这个答案,以防有人遇到类似的问题

对于第一个选择,在forms.py中,我将
widget=forms.CheckboxSelectMultiple
替换为
widget=forms.SelectMultiple
。令人惊讶的是,复选框被正确呈现。我不确定
复选框SelectMultiple
SelectMultiple
之间有什么区别,但后面的选项有效=)

对于这两种情况,我都必须更改zones.html。现在看起来是这样的:

{% block content %}
<div class="container">
    <div class="row">
        <form method="post">
            <div class="input-field col s6">
                {{ form.zones }}
                <label>Zones</label>
            </div>
            <div class="input-field col s6">
                {{ form.connections }}
                <label>Connection</label>
            </div>
        </form>
    </div>
</div>
{% endblock %}
{%block content%}
{{form.zones}}
地带
{{form.connections}}
联系
{%endblock%}