Django: создать массив ввода HTML, используя форму Django - PullRequest
10 голосов
/ 10 марта 2010

Я пытаюсь автоматизировать создание чего-то подобного:

<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 ]

8 голосов
/ 10 марта 2010

Якоб Каплан-Мосс (соавтор 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 %}
1 голос
/ 10 марта 2010

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

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

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

1 голос
/ 10 марта 2010

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

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

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

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