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 %}

Который затем, надо надеяться, получил бы меня исходный входной список, показанный выше...

12
задан Brant 10 March 2010 в 20:11
поделиться

3 ответа

Похоже, я могу делать то, что мне нужно, разбивая форму на несколько наборов форм ...

http: //docs.djangoproject.com/en/dev/topics/forms/formsets/#topics-forms-formsets

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

1
ответ дан 2 December 2019 в 22:04
поделиться

Джейкоб Каплан-Мосс (соавтор 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 %}
9
ответ дан 2 December 2019 в 22:04
поделиться

Это должно быть больше похоже на, например: [

# in a model class
for i in range(1, prim+1):
    self.fields['asdf_%s' % i] = forms.CharField(label='Label %i' % i)

], но это очень зависит от того, чего вы хотите достичь.

1
ответ дан 2 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: