我想使用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)。
答案 0 :(得分:1)
我设法解决了该问题,并在有人遇到类似问题的情况下发布了此答案。
对于第一次选择,在forms.py中,我将widget=forms.CheckboxSelectMultiple
替换为widget=forms.SelectMultiple
。令人惊讶的是,这些复选框正确呈现。我不确定CheckboxSelectMultiple
和SelectMultiple
之间的区别,但是以后的工作=)
对于这两种情况,我都必须更改我的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 %}