在django视图中组合modelformset和inlineformset

时间:2012-08-13 06:46:12

标签: python django django-forms django-views

我有两个型号

   class A(models.Model):
        name = models.CharField(50)
        type = models.CharField(50)

   class B(models.Model):
        field1 = ForeignKeyField(A)
        value = IntegerField()

我想通过ModelFormSet(来自模型A)显示多个表单,其中每个表单依次为连接到对象的所有对象显示InlineFormSets(来自模型B)。

如何在django视图中的save方法中结合使用modelformsets(模型A)和内联formset(mdoel B)?

2 个答案:

答案 0 :(得分:1)

一周前我一直在努力解决这个问题。我建议你开始使用inlineformset_factory方法:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/

然后,只需将基本表单和formset添加到视图中并进行渲染。

以下是一些博客文章帮我解决了这个问题:http://charlesleifer.com/blog/djangos-inlineformsetfactory-and-you/

还有一个解决方案可以使用基于类的视图:http://haineault.com/blog/155/

答案 1 :(得分:0)

我不确定这是一个很好的解决方案,但这是我能想到的唯一可行的解​​决方案。

我会创建一个词典列表。每个Dictionary都有一个baseForm键,它将保存你的B类表单和一个inline_forms键,它将保存你的A类inline_formset。

在您的视图代码中迭代列表并相应地打印表单。为每个表单提交按钮生成不同的值。 例如,对于第一种形式的submit_1,蚀刻..

提交表单时,请检查此值(提交按钮的值),如果值为例如submit_2,则表示您确定已提交列表的第二个项目/表单。 从他们可以开始处理提交的数据。