Фиксируют результаты множественного выбора радиобоксов Django

#django #forms

#django #формы

Вопрос:

Здесь полный новичок…

Я провожу опрос, в котором я показываю 5 вопросов на странице. Каждый вопрос содержит 4 радиобокса.

В моем шаблоне django я просматриваю контейнер (latest_poll_list) всех моих вопросов (опрос):

     <form action="/first/vote/" method="post">
{% csrf_token %}
{% for poll in latest_poll_list %}
    <li>{{ poll.question }}</li>
        {% for choice in poll.choice_set.all %}
            <input type="radio" name="choice{{poll.id}}" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
            <label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
        {% endfor %}
{% endfor %}
    <input type="submit" value="Vote" />
</form>
  

Наконец, как мне вернуть результаты из нескольких вопросов? Должен ли я помещать choice poll.id в массив / контейнер?

Кроме того, откуда django знает, что forloop.counter ссылается на внутренний цикл, а не на внешний цикл? Спасибо за ваше терпение, пока я наращиваю!

Ответ №1:

Я бы рассмотрел возможность использования formset или model formset .

а forloop.counter предназначен для самого внутреннего forloop, однако вы можете передать счетчик из внешнего forloop во внутренний forloop, используя {% with %} тег:

 {% for object in objects %}
    <label>{{ forloop.counter }}</label>
    {% with outside_counter=forloop.counter %}
    {% for subobject in object %}               
    <p>outside: {{ outside_counter }} inside: {{ forloop.counter }}</p>
    {% endfor %}
    {% endwith %}
{% endfor %}
  

Результаты:

 <label>0</label>
<p>outside: 0 inside: 0</p>
<p>outside: 0 inside: 1</p>
<label>1</label>
<p>outside: 1 inside: 0</p>
<p>outside: 1 inside: 1</p>
...