如何以Django表单的形式呈现选项?

时间:2019-01-17 14:52:53

标签: django python-3.x django-forms materialize

我想使用Django渲染两个选择(一个选择,另一个选择一个简单的选择),并使用Materialize对其进行自定义。我设法编写了以下代码:

在我的表格中。py

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)

在我的zone.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 %}

我的问题是:呈现页面时,我为第一个选择(如预期的那样)获得4个复选框,并且没有名称(所有选项均为空白)。对于第二个选择,我有4个选项(一个空白,一个带有'ABCDE',一个空白,一个带有'FGHIJ')。

我怀疑问题出在属性上。我没有为他们得到正确的值(我尝试过opt.label,opt.text,opt.choices,opt.value,opt ...)。如何正确访问它们?

另一个问题:是否有一种很好的调试方法?我是Django和Web-dev的新手。我尝试了 import pdb; pdb.set_trace()进行调试,但无法通过断点浏览其他方法(我正在使用PyCharm)。

1 个答案:

答案 0 :(得分:1)

我设法解决了该问题,并在有人遇到类似问题的情况下发布了此答案。

对于第一次选择,在forms.py中,我将widget=forms.CheckboxSelectMultiple替换为widget=forms.SelectMultiple。令人惊讶的是,这些复选框正确呈现。我不确定CheckboxSelectMultipleSelectMultiple之间的区别,但是以后的工作=)

对于这两种情况,我都必须更改我的zone.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 %}