Циклы в формах Django - PullRequest
       29

Циклы в формах Django

0 голосов
/ 18 ноября 2008

Я только начал создавать прототип приложения в Django. Я начал с работы с учебным пособием по Django на сайте Django , которое было довольно полезным и дало мне то, что мне нужно для начала. Теперь у меня есть пара простых вопросов:

Я хочу поместить цикл в views.py, зацикливая на множестве переменных, которые были переданы из формы. Таким образом, у меня есть множество элементов в форме HTML, каждый из которых имеет раскрывающийся список SELECT, чтобы люди могли выбрать счет от 0 до 10, например:

<select name="score1">
  <option value=0 SELECTED>No score</option>
  <option value=1>1</option>
  <option value=2>2</option>
  <option value=3>3</option>
  <option value=4>4</option>
  <option value=5>5</option>
  <option value=6>6</option>
  <option value=7>7</option>
  <option value=8>8</option>
  <option value=9>9</option>
  <option value=10>10</option>
</select>

Итак, у меня есть, скажем, 100 из этих переменных: оценка1, оценка2, оценка3, ..., оценка99, оценка100. Когда форма отправлена, я хочу пройтись по каждой из этих переменных и посмотреть, установлена ​​ли она (то есть не 0), и если да, то я хочу сохранить это значение в подходящем месте в базе данных. Моя проблема в том, что я не могу понять, как пройти через эти переменные. Я предполагаю, что хочу что-то вроде этого:

for o in request.POST.all

endfor

но тогда я действительно не уверен, что с этим делать.

На самом деле я не ищу кого-то, кто мог бы написать код для меня: мне просто хотелось бы получить несколько советов о том, как написать цикл, подобный этому, в python / Django, а также, возможно, несколько указателей относительно хорошего справочного руководства. можете посмотреть онлайн или купить, что даст мне доступ к такого рода вещам.

Кроме того, объект select, который я описал выше, в значительной степени создан вручную, и мне бы очень хотелось иметь возможность создать цикл для его генерации в шаблоне. Мой шаблон в настоящее время имеет это:

<table>
{% for movie in movie_list %}
  <tr>
  <td> {{ movie }} </td>
  <td>
       <select name="score{{ movie.id }}">
         <option value=0 SELECTED>No score</option>
         <option value=1>1</option>
         <option value=2>2</option>
         <option value=3>3</option>
         <option value=4>4</option>
         <option value=5>5</option>
         <option value=6>6</option>
         <option value=7>7</option>
         <option value=8>8</option>
         <option value=9>9</option>
         <option value=10>10</option>

       </select>
  </td></tr>

{% endfor %}
</table>

Я чувствую, что должен быть способ создать простой цикл, который насчитывает от 1 до 10, который сгенерирует для меня большинство этих опций, но я не могу понять, как это сделать ...

Ответы [ 3 ]

7 голосов
/ 18 ноября 2008

Вам нужно взглянуть на Django формы .

Вы никогда не должны создавать свою собственную форму, подобную этой.

Вы должны объявить класс Form, который включает ChoiceField и предоставить область выбора для этого поля. Все будет происходить в значительной степени автоматически оттуда.

Варианты, кстати, должны быть определены в вашей модели как диапазон значений для этого поля модели.

Ваша страница содержит только {{form}}. Джанго строит форму с вариантами и декодирует варианты до конечного результата.

1 голос
/ 19 ноября 2008

Следуйте советам С.Лоттса по формам, в конечном итоге это сэкономит время, чтобы сделать их способом Джанго сейчас. Для того цикла, который вы искали:

<select name="score{{ movie.id }}">
    <option value=0 SELECTED>No score</option>
  {% for i in range(1, 11) %}
    <option value={{ i }}>{{ i }}</option>
  {% endfor %}
</select>
1 голос
/ 18 ноября 2008

Я чувствую, что должен быть способ создать простой цикл, который рассчитывает от От 1 до 10, которые генерируют большую часть эти варианты для меня, но я не могу выяснить, как это сделать ...

Если вы не хотите использовать формы Django (почему, кстати?), Проверьте этот пользовательский тег диапазона или просто передайте объект диапазона (1, 11) в шаблон и используйте его в {% for %} петля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...