У меня есть простое приложение, в котором пользователи должны делать ставки на исход матча. Матч состоит из двух команд, результата и ставки. Матчи с командами создаются в админке 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 в шаблон и запускаю только внутренний цикл.
Предложения очень ценятся.