2

我有 2 个对象,它们都来自不同的模型类,并且想要显示一个包含每个对象的一些字段的表单。我怎样才能做到这一点?

4

3 回答 3

5

我这样做的方法是创建两个ModelForm类,它们使用fieldsMeta 属性来指定要在表单中显示的字段子集。我在模板中显示这两个表单,并在视图中处理它们。

于 2008-12-13T15:00:04.383 回答
0

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

于 2008-12-15T19:37:11.573 回答
-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并捕获和冒泡异常...我也不确定如果您有冲突的字段名称会发生​​什么。那可能很麻烦...

于 2008-12-13T00:05:59.650 回答