J'ai une application simple où les utilisateurs sont censés parier sur le résultat d'une correspondance. Un match consiste en deux équipes, un résultat et un enjeu. Les matchs avec des équipes sont créés dans l'admin Django, et les participants doivent remplir le résultat et l'enjeu.Rendu plusieurs instances Formulaire
Le formulaire doit être généré dynamiquement, en fonction des correspondances dans la base de données.
Mon idée est d'avoir une instance de formulaire (Django) pour chaque correspondance et de passer ces instances au modèle.
Cela fonctionne très bien quand je le fais depuis le shell django, mais les instances ne sont pas rendues quand je charge ma vue.
La forme ressemble à ceci:
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)
Mon (préliminaire) vue ressemble à ceci:
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)
)
Ma première pensée était que je pouvais passer le form_collection au modèle et la boucle throught la collection comme ceci, mais l'id ne fonctionne pas:
{% for form in forms %}
{% for field in form %}
{{ field }}
{% endfor %}
{% endfor %}
(la sortie est réellement les touches dict avec des espaces ajoutés entre chaque lettre - je ne sais pas pourquoi ...)
Cela fonctionne si je ne fais que passer une instance de formulaire au modèle et exécute seulement la boucle interne.
Les suggestions sont grandement appréciées.
Merci, ça l'a fait! Je suis d'accord que c'est une meilleure idée de mettre les instances de formulaire dans une liste à la place. – vorpyg