渲染多个Form实例

vor*_*pyg 1 forms django django-forms

我有一个简单的应用程序,用户应该在比赛结果上下注.比赛由两个队组成,一个结果和一个赌注.在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)
Run Code Online (Sandbox Code Playgroud)

我的(初步)视图如下所示:

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)
        )
Run Code Online (Sandbox Code Playgroud)

我最初的想法是,我可以将form_collection传递给模板,并将循环传递给像这样的集合,但是id不起作用:

        {% for form in forms %}
            {% for field in form %}
                {{ field }}
            {% endfor %}
        {% endfor %}
Run Code Online (Sandbox Code Playgroud)

(输出实际上是dict键,每个字母之间添加了空格 - 我不知道为什么......)

如果我只将一个Form实例传递给模板并且只运行内部循环,它就可以工作.

建议非常感谢.

Dan*_*man 5

再一次,在页面上拥有多个表单的最佳方法是使用formset.