Django: создание входного массива HTML с помощью формы django
Я пытаюсь автоматизировать создание чего-то подобного:
<input type='text' name='asdf[]' />
<input type='text' name='asdf[]' />
<input type='text' name='asdf[]' />
на велосипеде через различные формы. Я пробовал такие вещи, наряду с несколькими другими вариантами:
# in a model class
for i in range(1, prim+1):
self.fields['asdf'] = forms.CharField(label=i)
# in the template
<form action='#' method='post'>
{{form.as_p}}
</form>
но мне не повезло.
как я могу автоматизировать массив входных данных?
** редактировать ** Чтобы уточнить, в конечном итоге мне нужно иметь доступ к полям в шаблоне следующим образом:
{% for input in form.fields.asdf %}
{{input}}
{% endfor %}
что бы тогда, надеюсь, получите мне исходный список ввода, показанный выше...
3 ответов
Джейкоб Каплан-Мосс (соавтор Django) недавно опубликовал отличную статью для обработки динамических форм, которая должна решить вашу проблему предпочтительным способом: http://jacobian.org/writing/dynamic-form-generation/
Он использует тот же метод, что и Феликс, но стоит прочитать всю статью, чтобы лучше понять концепцию.
С помощью asdf[]
техника коряво, потому что тогда вам придется иметь дело с Заказ. Это также не стандартная практика.
Edit:
для обработки ситуации, когда вам нужно определить, когда вы попали в эти динамические поля:
{% for input in form.fields %}
{% ifequal input.label 'asdf' %}
{{ forloop.counter }}: {{input}}<br />
{% endifequal %}
{% endfor %}
это должно быть больше похоже, например:
# in a model class
for i in range(1, prim+1):
self.fields['asdf_%s' % i] = forms.CharField(label='Label %i' % i)
но это очень зависит от того, чего вы хотите достичь.
похоже, я могу сделать то, что мне нужно, разбив форму на несколько наборов форм...
http://docs.djangoproject.com/en/dev/topics/forms/formsets/#topics-forms-formsets
тогда я должен иметь доступ к каждому набору форм индивидуально из шаблона, обертывая их все в один