Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:将表单放入表单(递归…)_Python_Django_Forms_Recursion_Django Forms - Fatal编程技术网

Python Django:将表单放入表单(递归…)

Python Django:将表单放入表单(递归…),python,django,forms,recursion,django-forms,Python,Django,Forms,Recursion,Django Forms,我喜欢Django表单库,但如果表单可以包含表单,那就更好了 我的梦想是这样的: 我有一个与普通表单类似的表单:例如一个名为SuperForm SuperForms可以包含多个标准格式,甚至(递归)SuperForms 您可以将其绑定到数据(使其绑定),调用是有效的() django或外部应用程序是否可以实现这一点 更新 我看到很多人不明白我想要什么。是我的错,我没有给出用例 用例:页面应该允许用户更新他的电子邮件和电话号码。电子邮件来自django.contrib.auth,电话号码来自我

我喜欢Django表单库,但如果表单可以包含表单,那就更好了

我的梦想是这样的:

  • 我有一个与普通表单类似的表单:例如一个名为
    SuperForm
  • SuperForms
    可以包含多个标准格式,甚至(递归)
    SuperForms
  • 您可以将其绑定到数据(使其绑定),调用
    是有效的()
django或外部应用程序是否可以实现这一点

更新

我看到很多人不明白我想要什么。是我的错,我没有给出用例

用例:页面应该允许用户更新他的电子邮件和电话号码。电子邮件来自django.contrib.auth,电话号码来自我们的定制型号

两个输入都应位于一个
标记中。由于
ModelForm
易于使用,我不想自己手工创建表单

我想要一个包含django.contrib.auth.models.User的
ModelForm
和自定义模型的
ModelForm
的容器

我不想自己循环这两种表单(在其他用例中可能有更多表单),并检查它们是否有效


如果我在容器上调用
is\u valid()
save()
,就会调用表单的匹配方法。

乍一看,您的想法似乎很复杂。直接的问题是“为什么需要这样的功能?”。99%的任务可以用内置的Django“砖块”解决,另外1%-“请硬编码”。此外,我可能认为这种想法背后的问题也很复杂,最终用户很难理解。

我不确定您到底想实现什么,但我曾经解决过一个关于动态表单的问题

如果您有一个表单(或
ModelForm
或任何您需要的),您可以根据需要在视图中初始化该表单多少次

如果您有一个名为
MyForm
的表单,您可以在视图中执行以下操作:

...        ...
form1 = MyForm(...)
form2 = MyForm(...)
form3 = MyForm(...)
...         ...
你可以把它们全部发送到模板

此数量的表单不需要是静态的,您可以将大量“动态”表单添加到列表中,然后将表单列表发送到模板,并根据需要在模板中进行管理

如果你能多解释一下你的处境以及你为什么要这么做,对你和那些试图帮助你的人来说会更好,因为我的答案可能对你没用

无论如何,我强烈建议您检查,因为这是在一个模板中生成/管理动态表单的最佳方法


在哪种情况下,您需要这种“动态”表格

你想得到什么样的信息

您正在尝试动态创建对象吗

您是否试图根据某些信息创建多个表单


如何在模板/视图中管理这些“动态”表单

我认为你对形式的思考与你应该思考的不同

表格只是用来输入的。如何处理它们取决于您


确保您可以在表单上运行是有效的,这将对照您分配的modelform进行检查。最棒的是,您可以在同一表单上检查多个模型表单。模型表单所需的数据将被处理,多余的数据将被忽略。如果is_valid失败,您仍然会像通常需要更正的那样将数据传回

你应该试试看。通过这种方式,您将能够编写如下代码:

取自随包分发的示例


亲爱的否决此问题的用户:请告诉我您为什么不喜欢它,以及如何改进它。谢谢。我不确定你是否了解表单的工作原理。你看过表单集的文档了吗@Johndt6表单集只能对同一表单类执行N次。我想要N种不同的形式和递归。AFAIK表单集不能这样做。如果我错了,请告诉我。您是否希望一个表单类包含多个可调用的表单?或者您正在考虑一个可以使用不同选项动态生成的类吗?我相信这是可能的(尽管这会让人感到困惑,而且需要做很多工作)。但你为什么不这么做呢?您希望解决的问题是什么,因为可能有一种更简单的方法。对于那些记下这一点的人,我的答案仍然有效-尽管我没有给出示例代码,但我所写的仍然是正确的。可以在同一标记中包含多个表单,该标记由多个模型表单同时处理。ModelForm只依赖输入“name”属性来匹配您试图在模型表单中处理的元素。我没有否决您的答案,但我想向您解释一些事情。如果你的答案被否决,那不是针对个人的(相信我,我已经受苦了),而是社区根据问题对你的答案进行排名。是的,你的答案与问题相匹配很重要,例如(一个极端的问题),即使是真的,如果你问我:“嘿,我怎么能为煮咖啡写代码?”我的答案是:“是的,伙计,天是蓝的!”这是真的,但是,你怎么投票给这个答案呢?向上还是向下?看起来像是我在找的。谢谢。我发现还有其他表单库可以做这样的事情:例如
from django import forms
from django.contrib.auth.forms import UserCreationForm
from composite_form.forms import CompositeForm
from example.models import Profile


class BaseProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        exclude = ("user")


class ProfileForm(CompositeForm):
    form_list = [UserCreationForm, BaseProfileForm]

    def clean_address(self):
        return "blah"

    def save(self, commit=True):
        if not self.is_valid():
            raise ValueError("Invalid form")
        user_form = self.get_form(UserCreationForm)
        user = user_form.save()
        profile_form = self.get_form(BaseProfileForm)
        profile_form.instance.user = user
        return profile_form.save()