Я пытаюсь автоматизировать создание чего-то вроде этого:
<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 %}
Который затем, надо надеяться, получил бы меня исходный входной список, показанный выше...
Похоже, я могу делать то, что мне нужно, разбивая форму на несколько наборов форм ...
http: //docs.djangoproject.com/en/dev/topics/forms/formsets/#topics-forms-formsets
Затем я смогу получить доступ к каждому набору форм индивидуально из шаблона, объединяя их все в один
Джейкоб Каплан-Мосс (соавтор Django) недавно опубликовал отличную статью по работе с динамическими формами, которая должна решить вашу проблему предпочтительным способом: { {1}} http://jacobian.org/writing/dynamic-form-generation/
Он использует тот же метод, который предлагает Феликс, но стоит прочитать всю статью, чтобы лучше понять концепцию .
Использование техники asdf []
небрежно, потому что тогда вам придется иметь дело с упорядочиванием. Это тоже не стандартная практика.
Изменить:
Чтобы справиться с ситуацией, когда вам нужно определить, когда вы попадаете в эти динамические поля:
{% 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)
], но это очень зависит от того, чего вы хотите достичь.