我有一個簡單的應用程序,用戶應該在匹配結果上下注。一場比賽包括兩支球隊,一個結果和一個賭注。在Django管理員中創建與團隊匹配,參與者將填寫結果和賭注。呈現多個表單實例
必須根據數據庫中的匹配動態生成表單。
我的想法是每個匹配都有一個(Django)Form實例,並將這些實例傳遞給模板。
它可以正常工作,當我從django shell執行它,但是實例在加載我的視圖時沒有呈現。
的形式如下:
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傳遞到模板和循環throught像這樣的集合,但id不起作用:
{% for form in forms %}
{% for field in form %}
{{ field }}
{% endfor %}
{% endfor %}
(輸出實際上是在每個字母之間添加空格的字典鍵 - 我不知道爲什麼...)
它的工作原理如果我只將一個Form實例傳遞給模板,並且只運行內部循環。
建議非常感謝。
謝謝,這樣做!我同意將表單實例放入列表中是一個更好的主意。 – vorpyg 2010-06-01 21:07:39