2010-03-03 10 views
23

Co próbuję zrobić, to zarządzać kilkoma formularzami na jednej stronie, wiem, że są formsety i wiem, jak działa zarządzanie formularzami, ale mam pewne problemy z pomysłem, który mam na uwadze.Django - Praca z wieloma formularzami

Wystarczy, aby pomóc sobie wyobrazić, co mój problem jest mam zamiar użyć przykładu Django modele:

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) 

Teraz wyobraź sobie, że już dokonał clases forma:

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',) 

To, co chcę zrobić, to mieć kilka instancji formularza modelu Ankiety i wyboru na jednej stronie, ale pamiętaj, że te modele można powtórzyć:

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

Jak widać, istnieją dwie formy ankiety i jedna forma wyboru, ale formularze ankiety są oddzielone formularzem wyboru. Potrzebuję, aby formularze zachowały kolejność na stronie, więc jest trochę trudniej korzystać z formularzy.

Problemem, który dostałem, jest to, że wartości, które pojawiają się we wpisie, to nazwa "odpowiedź", więc otrzymuję listę wszystkich elementów ze wszystkich formularzy o nazwie "odpowiedź" i nie mogę określić, które z nich należą do każdej formy.

Nie wiem, czy to wyjaśnienie daje jasny obraz mojego problemu. Jakieś pomysły, żeby to zrobić?

Dzięki za pomoc!

PD: Nie zwracaj uwagi na relację między sondą a wyborem, te modele mają jedynie na celu wyjaśnienie problemu, więc relacja nie ma żadnego znaczenia.

Odpowiedz

51

Użyj prefix kwarg

można zadeklarować swoją postać jako:

form = MyFormClass(prefix='some_prefix') 

a następnie, o ile prefiks to samo, przetwarzania danych, jak:

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

Django zajmie się resztą.

W ten sposób można uzyskać dowolną liczbę formularzy tego samego typu na stronie

Powiązane problemy