我喜欢 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/