Django - 使用多种形式

Posted

技术标签:

【中文标题】Django - 使用多种形式【英文标题】:Django - Working with multiple forms 【发布时间】:2011-01-23 08:55:50 【问题描述】:

我想做的是在一个页面中管理多个表单,我知道有表单集,并且我知道表单管理是如何工作的,但是我的想法有些问题。

只是为了帮助您想象我的问题是我将使用 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 之间的关系,那些模型只是为了澄清问题,所以关系根本不重要。

【问题讨论】:

【参考方案1】:

使用prefix kwarg

您可以将表单声明为:

form = MyFormClass(prefix='some_prefix')

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

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

Django 会处理剩下的。

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

【讨论】:

以上是关于Django - 使用多种形式的主要内容,如果未能解决你的问题,请参考以下文章

django 形式与传统形式

C# 以多种形式使用 MS Access 数据库

如何使用 keyup 功能进行多种形式的输入

使用单选按钮显示/隐藏 div 的多种重力形式验证

PHP 多种形式,第二种使用来自第一种的数据

php 重力形式 - 禁止多种形式的字段中的字符