2010-03-03 135 views
23

我想要做的是在一個頁面中管理多個表單,我知道有表單管理,我知道表單管理是如何工作的,但是我遇到了一些問題心裏。Django - 使用多種形式

只是爲了幫助你想象我的問題是什麼,我要使用Django的模型示例:

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) 

現在,想象我已經做形式clases:

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

所以我想要做的是在單個頁面中有幾個投票和選擇模型的實例,但是請注意,這些模型也可以重複:

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

正如您所見,有兩個投票表單和一個選擇表單,但投票表單由選擇表單分隔。我確實需要表單在頁面中保留它們的順序,所以使用formset有點困難。

我得到的問題是,在帖子中出現的值都是由名稱「答案」,所以我從所有形式的名稱「答案」獲得所有元素的列表,我不能確定哪些屬於每種形式。

不知道這個解釋是否能清楚地看到我的問題。任何想法來完成這個東西?

感謝您的幫助!

PD:不關注Poll和Choice之間的關係,這些模型只是爲了澄清問題,所以關係根本就沒有關係。

回答

51

使用prefix kwarg

你可以聲明形式:

form = MyFormClass(prefix='some_prefix') 

,然後,只要前綴是一樣的,過程數據:

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

的Django將處理其餘的事情。

這樣你就可以在頁面上擁有儘可能多的相同類型的窗體