我喜欢 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()
