我要做的是在一个页面中管理多个表单,我知道有表单集,我知道表单管理是如何工作的,但是我对这个想法有些疑问。
只是为了帮助你想象我的问题是什么我将使用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)
现在,想象一下,我已经制作了表格条款:
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',)
所以我想要做的是在一个页面中有几个Poll和Choice模型的表单实例,但是请注意这些模型也可以重复:
<form action="{{url}}" method="post">
{{pollform}}
{{choiceform}}
{{pollform}}
</form>
正如您所看到的,有两种轮询形式和一种选择形式,但轮询形式由选择形式分隔。我确实需要表单在页面中保持顺序,因此使用表单集要困难一些。
我得到的问题是帖子中的值都是名称“answer”,所以我得到了所有表单中所有元素的列表,名称为“answer”,我无法识别哪些属于每种形式。
不知道这个解释是否能清楚地看到我的问题。有什么想法来完成这些工作吗?
感谢您的帮助!
PD:不要关注Poll和Choice之间的关系,这些模型只是为了澄清问题,所以这种关系根本不重要。答案 0 :(得分:54)
使用prefix
kwarg
您可以将表单声明为:
form = MyFormClass(prefix='some_prefix')
然后,只要前缀相同,处理数据为:
form = MyFormClass(request.POST, prefix='some_prefix')
Django会处理剩下的事情。
通过这种方式,您可以在页面上拥有任意数量的相同类型的表单