2010-03-03 100 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将处理其余的事情。

这样你就可以在页面上拥有尽可能多的相同类型的窗体