Django - 使用多种形式

Fer*_*her 27 python forms django django-forms

我想要做的是在一个页面中管理多个表单,我知道有表单集,我知道表单管理是如何工作的,但是我遇到了一些问题.

只是为了帮助你想象我的问题是什么我将使用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)
Run Code Online (Sandbox Code Playgroud)

现在,想象一下我已经制作了表格条款:

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',) 
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是在一个页面中有几个Poll和Choice模型的表单实例,但是请注意这些模型也可以重复:

<form action="{{url}}" method="post">
    {{pollform}}
    {{choiceform}}
    {{pollform}}
</form>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有两个Poll表单和一个Choice表单,但Poll表单由Choice表单分隔.我确实需要表单在页面中保持顺序,因此使用表单集要困难一些.

我得到的问题是,帖子中的值都是名称"answer",所以我得到了所有表单中所有元素的列表,名称为"answer",我无法确定哪些属于每种形式.

不知道这个解释是否能清楚地看到我的问题.有什么想法让这些东西完成吗?

谢谢你的帮助!

PD:不要关注Poll和Choice之间的关系,这些模型只是为了澄清问题,所以这种关系根本不重要.

Zac*_*ach 56

使用prefixkwarg

您可以将表单声明为:

form = MyFormClass(prefix='some_prefix')
Run Code Online (Sandbox Code Playgroud)

然后,只要前缀相同,处理数据为:

form = MyFormClass(request.POST, prefix='some_prefix')
Run Code Online (Sandbox Code Playgroud)

Django将处理剩下的事情.

这样,您可以在页面上拥有任意数量的相同类型的表单