【问题标题】:combine modelformset and inlineformset in django views在 django 视图中结合 modelformset 和 inlineformset
【发布时间】:2012-08-09 09:21:58
【问题描述】:

我有两个模型

   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 视图中的保存方法上结合模型表单集(模型 A)和内联表单集(mdoel B)?

【问题讨论】:

    标签: python django django-forms django-views


    【解决方案1】:

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

    我会创建一个字典列表。每个 Dictionary 都有一个 baseForm 键,用于保存您的 B 类表单和一个 inline_forms 键,用于保存您的 A 类 inline_formset。

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

    当一个表单被提交时,检查这个值(提交按钮的值),如果这个值是例如 submit_2 你确定你的列表中的第二个项目/表单已经被提交了。 您可以从他们那里开始处理提交的数据。

    【讨论】:

    • 这意味着对于 10 个表单,我需要生成 10 个提交按钮?
    • 是的,这不是你要求的吗?在一页上有多个表格。每个单独的表单都需要一个提交按钮,否则无法提交。
    【解决方案2】:

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

    然后只需将您的基本表单和表单集添加到您的视图并呈现它们。

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

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

    【讨论】:

    • 我认为这些链接将仅描述一种表单和相关的内联表单集。但我想要通过 ModelFormSet(来自模型 A)的表单数量,其中每个表单依次显示连接到对象的所有对象的 InlineFormSets(来自模型 B)
    • 所以你想要一个内联表单集的表单集。具有内联表单集的表单数量是固定的还是动态的?
    • 是的,它是动态的。我想要模型 A 的 modelformset,然后是每种形式的 modelformset 的内联表单集
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2015-04-18
    • 1970-01-01
    • 2015-06-25
    • 2014-07-16
    • 2018-07-28
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多