Как отобразить параметры в форме выбора Django? - PullRequest
0 голосов
/ 17 января 2019

Я хотел бы сделать два выбора с помощью 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)

В моих зонах.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).

1 Ответ

0 голосов
/ 17 января 2019

Мне удалось решить проблему, и я публикую этот ответ на случай, если кто-то столкнется с аналогичной проблемой.

Для первого выбора в файле 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 %}
...