【问题标题】:How to render the options in a select of a Django form?如何在选择的 Django 表单中呈现选项?
【发布时间】:2019-01-17 14:52:52
【问题描述】:

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

在我的 forms.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 和一般网络开发的新手。我试过 import pdb; pdb.set_trace() 进行调试,但我无法通过断点来浏览其他方法(我正在使用 PyCharm)。

【问题讨论】:

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


    【解决方案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 %}
    

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2018-09-20
      • 2016-02-18
      • 1970-01-01
      相关资源
      最近更新 更多