如何在Django中从2个不同的模型对象创建表单对象?

时间:2008-12-12 22:57:41

标签: django django-forms

我有两个来自不同Model类的对象,并希望显示一个包含每个对象的表单。我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

我这样做的方法是创建两个使用ModelForm Meta属性的fields类来指定用于在表单中显示的subset of fields。我在模板中显示两个表单,并在视图中处理它们。

答案 1 :(得分:0)

只需创建2个单独的表单,上面那个人的方法的问题是你会丢失.save()。表单实际上是代表一组数据,每个模型的数据实际上是一组独立的数据。这就是表单在渲染时不包含标记的原因。

答案 2 :(得分:-2)

我从未尝试过这个,但您可以在代码中定义两个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并将陷阱和冒泡异常排除......我也不确定如果您有相互冲突的字段名称会发生​​什么。这可能很麻烦...