Визуализация нескольких экземпляров формы - PullRequest
1 голос
/ 02 июня 2010

У меня есть простое приложение, в котором пользователи должны делать ставки на исход матча. Матч состоит из двух команд, результата и ставки. Матчи с командами создаются в админке Django, и участники должны заполнить результат и поставить.

Форма должна генерироваться динамически на основе совпадений в базе данных.

Моя идея состоит в том, чтобы иметь один (Django) экземпляр формы для каждого совпадения и передавать эти экземпляры в шаблон.

Он отлично работает, когда я делаю это из оболочки django, но экземпляры не отображаются при загрузке моего представления.

Форма выглядит так:

class SuggestionForm(forms.Form):
    def __init__(self, *args, **kwargs):
        try:
            match = kwargs.pop('match')
        except KeyError:
            pass
        super(SuggestionForm, self).__init__(*args, **kwargs)
        label = match
        self.fields['result'] = forms.ChoiceField(label=label, required=True, choices=CHOICES, widget=forms.RadioSelect())
        self.fields['stake'] = forms.IntegerField(label='', required=True, max_value=50, min_value=10, initial=10)

Мой (предварительный) вид выглядит следующим образом:

def suggestion_form(request):
    matches = Match.objects.all()
    form_collection = {}

    for match in matches:
        f = SuggestionForm(request.POST or None, match=match)
        form_collection['match_%s' % match.id] = f

    return render_to_response('app/suggestion_form.html', {
        'forms': form_collection,
        },
        context_instance = RequestContext(request)
        )

Первоначально я думал, что я могу передать form_collection в шаблон, и цикл будет проходить через коллекцию следующим образом, но id не работает:

        {% for form in forms %}
            {% for field in form %}
                {{ field }}
            {% endfor %}
        {% endfor %}

(на самом деле вывод - это клавиши dict с добавленными пробелами между буквами - я понятия не имею, почему ...)

Это работает, если я передаю только один экземпляр Form в шаблон и запускаю только внутренний цикл.

Предложения очень ценятся.

Ответы [ 2 ]

5 голосов
/ 02 июня 2010

Еще раз, лучший способ иметь несколько форм на странице - это использовать formsets .

1 голос
/ 02 июня 2010

Чтобы перебрать словарь в шаблоне django, вы должны использовать:

{% for key,value in dictionary.items %}{{ value }}{% endfor %}

поэтому

 {% for key, value in forms.items %}
    {% for field in value %}
        {{ field }}
    {% endfor %}
 {% endfor %}

должен добиться цели!

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

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