Как получить текст поля выбора из html-формы в django?

dreadedHarvester спросил: 28 марта 2018 в 04:46 в: python

Я создал форму с полем выбора в шаблоне ehrinfo.html

<form action="{% url 'ehrs:compcreate' %}" method="GET">
    <select>
        <option value="Vital Signs">Vital Signs</option>
        <option value="Cancer Signs">Cancer Signs</option>
    </select><br><br>
    <input type="submit" value="Select Template" class="addehr">
</form>

Я определил класс формы как:

class templateselect(forms.Form):
CHOICES = (
    ('Vital Signs', 'Vital Signs'),
    ('Cancer Signs', 'Cancer Signs'),
)
template = forms.ChoiceField(widget=forms.Select, choices=CHOICES)

Теперь я хочу получить выделенный текст из этой формы в view compcreate. Поэтому я использовал:

def compcreate(request):
if request.method == 'GET':
    form = templateselect(request.GET)
    print("a")
    if form.is_valid():
        print("b")
        template = str(form.cleaned_data["template"])

, но он не может пройти мимо части if form.is_valid():, поскольку 'a' напечатан, но 'b' не печатается на консоли. В чем проблема? Как получить выделенный текст в compcreate ()?


1 ответ

Есть решение
tanboon ответил: 28 марта 2018 в 05:21

Правильный способ визуализации вашей формы - передать ее шаблону через контекстный объект и изменить шаблон. Например:

<form action="{% url 'ehrs:compcreate' %}" method="GET">
    {{ form.as_p }}<br><br>
    <input type="submit" value="Select Template" class="addehr">
</form>

Если вы хотите придерживаться своей текущей настройки, просмотр HTML-кода, созданного предыдущим решением, предполагает, что добавление имени (равного имени вашего поля в объявление класса Form) в поле выбора также должно работать:

<form action="{% url 'ehrs:compcreate' %}" method="GET">
<select name="template">
    <option value="Vital Signs">Vital Signs</option>
    <option value="Cancer Signs">Cancer Signs</option>
</select><br><br>
<input type="submit" value="Select Template" class="addehr">