2010-03-03 14 views
23

Was ich versuche zu tun ist, mehrere Formulare auf einer Seite zu verwalten, ich weiß, dass es Formsets gibt, und ich weiß, wie das Formular-Management funktioniert, aber ich habe einige Probleme mit meiner Idee im Hinterkopf.Django - Mit mehreren Formularen arbeiten

nur Ihnen helfen, ich werde die django Beispiel Modelle vorstellen, was mein Problem ist, verwenden:

from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField() 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

Nun stelle ich habe bereits die Form clases gemacht:

from django import forms 
from mysite.polls.models import Poll, Choice 

class PollForm(forms.ModelForm): 
    class Meta: 
     model = Poll 

class ChoiceForm(forms.ModelForm): 
    class Meta: 
     model = Choice 
     exclude = ('poll',) 

Also, was ich tun möchte, ist mehrere Formular Instanzen des Poll und Choice-Modells auf einer einzigen Seite zu haben, aber bedenken Sie, dass diese Modelle auch wiederholt werden können:

<form action="{{url}}" method="post"> 
    {{pollform}} 
    {{choiceform}} 
    {{pollform}} 
</form> 

Wie Sie sehen können, gibt es zwei Poll-Formulare und ein Choice-Formular, aber die Poll-Formulare sind durch das Choice-Formular getrennt. Ich brauche, dass die Formulare ihre Reihenfolge auf der Seite beibehalten, daher ist es etwas schwieriger, Formularsätze zu verwenden.

Das Problem, das ich bekam, ist, dass die Werte, die in der Post kommen alle mit dem Namen "Antwort" sind, so bekomme ich eine Liste aller Elemente aus allen Formen mit dem Namen "Antwort" und ich kann nicht Identifizieren Sie, welche zu jedem Formular gehören.

Weiß nicht, ob diese Erklärung eine klare Sicht auf mein Problem bekommen. Irgendwelche Ideen, um das Zeug zu machen?

Danke für Ihre Hilfe!

PD: Achten Sie nicht auf die Beziehung zwischen Poll und Choice, diese Modelle sind nur um das Problem zu klären, so dass die Beziehung überhaupt keine Rolle spielt.

Antwort

51

Verwenden Sie die prefix kwarg

Sie Ihre Form erklären können, wie:

form = MyFormClass(prefix='some_prefix') 

und dann, solange das Präfix die gleiche ist, Prozessdaten wie:

form = MyFormClass(request.POST, prefix='some_prefix') 

Django wird den Rest erledigen.

Auf diese Weise können Sie auf der Seite

beliebig viele Formulare desselben Typs erstellen
Verwandte Themen