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

тогда я должен иметь доступ к каждому набору форм индивидуально из шаблона, обертывая их все в один