一尘不染

Django-使用多种形式

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)

现在,假设我已经完成了表格的分类:

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 and Choice模型的多个表单实例,但是请记住,这些模型也可以重复:

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

如你所见,有两种“轮询”形式和一种“选择”形式,但“轮询”形式由“选择”形式分开。我确实需要表单在页面中保持顺序,因此使用表单集会有点困难。

我遇到的问题是,帖子中出现的值全都是名称“ answer”,因此我从名称中获得了所有表单中所有元素的列表,名称是“ answer”,但我无法确定哪些元素属于每种形式。

不知道这种解释是否对我的问题有清晰的认识。有什么想法可以完成这些工作吗?

谢谢你的帮助!

PD:不要关注“民意测验”与“选择”之间的关系,这些模型只是为了阐明问题,所以这种关系一点也不重要。


阅读 360

收藏
2020-03-31

共1个答案

一尘不染

使用prefixkwarg

你可以将表单声明为:

form = MyFormClass(prefix='some_prefix')

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

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

Django将处理其余的工作。

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

2020-03-31