django 向导,在同一步骤中使用表单和表单集

Posted

技术标签:

【中文标题】django 向导,在同一步骤中使用表单和表单集【英文标题】:django wizard, using form and formset in the same step 【发布时间】:2013-01-16 15:37:09 【问题描述】:

我有一个场景,我正试图计划开始编码,我正在考虑使用django wizard

我的计划是用两个步骤构建一个 django 向导,第一个简单但第二个有点复杂。第二步将包含一个表单,该表单将根据从第一步中选择的值进行重塑,我可以看到自己正在这样做。我已经探索了所有现有的功能,我认为它可以很容易地完成。

不过,我面临的挑战在于第二步本身。我有一个表单和一个表单集,表单集是一对多的表单(文章->图像),因此当到达第二步时,用户将能够将一个或多个图像上传到同一篇文章。

我试图在 google 邮件列表和 *** 上到处搜索以将表单集传递给 django 向导类,但似乎您不能在同一步骤中传递两个表单。

NewItemWizard.as_view([
    ('category',    CategorySelectionForm),
    ('article',        ArticleForm)
])

如上所示,在上面的示例代码中,我希望能够将 ArticleForm 和 ImageFormset 都传递到第二步。有没有办法做到这一点?

根据我正在阅读的内容,我相信使用 get_context_data 之类的函数可能会有所帮助,但它会非常笨拙。

def get_context_data(self, form, **kwargs):
    context = super(NewItemWizard, self).get_context_data(form=form, **kwargs)
    if self.steps.current == 'article':
        context.update(
            'image_formset': ImageFormset()
        )
    return context

任何人都可以建议更好的方法吗?

干杯,

【问题讨论】:

你看过django-form-wizard吗?它支持表单集。 【参考方案1】:

目前还没有直接的 API 可以做到这一点,但有一个干净的解决方案,就像这里提到的那样:

https://code.djangoproject.com/ticket/18830

【讨论】:

这种方法的好处在于,您不仅可以将其用于向导,还可以用于generic views,例如FormView。每个人都应该看看这个code example。 FormContainer 绝对值得成为 Django 框架的一部分!

以上是关于django 向导,在同一步骤中使用表单和表单集的主要内容,如果未能解决你的问题,请参考以下文章

Django 表单向导 - 每个步骤的自定义表单布局

如何显示作为最终 django 表单向导步骤输入的所有数据的预览?

Django 表单向导 - 取决于第一个表单步骤的选择

在 django 表单向导中使用不同的模板

需要澄清使用 Django 1.4 表单向导,特别是预填充和保存

如何使用默认文件存储(S3)通过 Django FormTools 表单向导上传文件?