【发布时间】:2010-09-26 17:44:12
【问题描述】:
我有 2 个对象,它们都来自不同的模型类,并且想要显示一个包含每个对象的一些字段的表单。我该怎么做?
【问题讨论】:
标签: django django-forms
我有 2 个对象,它们都来自不同的模型类,并且想要显示一个包含每个对象的一些字段的表单。我该怎么做?
【问题讨论】:
标签: django django-forms
我这样做的方法是创建两个ModelForm 类,它们使用fields 元属性来指定要使用哪个subset of fields 在表单中显示。我在模板中显示这两个表单,并在视图中处理它们。
【讨论】:
只需创建 2 个单独的表单,上面那个人的方法的问题是你会丢失 .save()。表单实际上是代表一组数据,您的每个模型的数据实际上是一组单独的数据。这就是为什么表单在渲染时不包含标签的原因。
【讨论】:
我从未尝试过,但您可以在代码中定义两个 ModelForm 类,然后创建一个新的普通 Form 类,该类在其 __init__ 中创建每个 ModelForm 的副本并将字段复制到自身.
类似:
class DualForm(forms.Form):
def __init__(self, *args, **kwargs):
model1 = Model1Form(**kwargs)
model2 = Model2Form(**kwargs)
for f in model1.fields:
self.fields[f] = model1.fields[f]
for f in model2.fields:
self.fields[f] = model2.fields[f]
class Model1Form(forms.ModelForm):
... your model form...
class Model2Form(forms.ModelForm):
... your other model form...
我不明白为什么它不起作用。
只需确保将数据参数传递给ModelForms 并捕获和冒泡异常...我也不确定如果字段名称冲突会发生什么。那可能很麻烦...
【讨论】: