python - Django:将表单放入表单(递归...)

标签 python django forms recursion django-forms

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

我的梦想是这样的:

  • 我有一个行为类似于正常形式的表单:例如一个名为 SuperForm 的类
  • SuperForm可以包含多种范式,甚至(递归)SuperForms
  • 您可以将其绑定(bind)到数据(使其绑定(bind)),调用 is_valid() ...

这可以通过 django 或外部应用程序实现吗?

更新

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

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

两个输入都应位于单个 <form> 中标签。自 ModelForm很容易使用,我不想自己手动创建表单。

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

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

如果我打电话is_valid()save()在容器上调用表单的匹配方法。

最佳答案

你应该尝试一下django-composite-form 。这样您就可以编写如下代码:

取自随包分发的示例

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()

关于python - Django:将表单放入表单(递归...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24722087/

相关文章:

Python - 如何通过 ssh 使用变量 grep 到远程机器

python - 如何在 PyTorch 中更新神经网络的参数?

python - Django 使用非数据库字段创建自定义管理 View

ruby-on-rails - rails 将 check_box_tag 条目大写

mysql - 如何使用 Xamarin Forms 连接到 Amazon MySQL 数据库?

使用不同输入表单(输入和文本区域)时的 JQuery Validator 问题

python - 为什么 int 列表在 python 3.7 及更高版本中没有得到转换,但在 python 2.7 上有效?

python - Appengine Python DevServer 模块后台线程 500 错误

django - 如何从 Django 自定义中间件类返回 rest_framework.response 对象?

python - 如何使用 django 将 html 表单变量传递给 python 函数