具有一个模型和 inlineformset 的 Formwizard

Posted

技术标签:

【中文标题】具有一个模型和 inlineformset 的 Formwizard【英文标题】:Formwizard with one model and inlineformset 【发布时间】:2011-09-03 20:32:03 【问题描述】:

我正在使用与一个模型匹配的 Formwizard 开发一个向导。 此外,由于我的模型和其他模型之间的关系,我使用 inlineformset_factory 使模板中存在字段。

我为模型属性创建了 2 个具有相同模型的表单。我刚刚更改了 fields 属性以区分我在向导中使用的两种表单。

为了在我的向导中保存表单信息,我正在这样做:

    def done(self, request, form_list):
    instance = Sale()
    for form in form_list:
        for field, value in form.cleaned_data.iteritems():
            setattr(instance, field, value)
    instance.save()

这很好用,但不能保存我的内联表单集

所以我在 done 方法中添加了这个:

    picture_formset = ProductPictureFormset(request.POST, instance=instance)
    if picture_formset.is_valid():
        picture_formset.save()

但是当我这样做时,我在 Django 中出现了这个错误:

Exception Type: ValidationError

我注意到我的内联表单集中包含的数据没有在步骤之间传递。 这就是我现在在向导中添加内联表单集的方式:

def parse_params(self, request, *args, **kwargs):
    if self.step == 0:
        self.extra_context.update(
            'picture_formset': ProductPictureFormset(),
            'brand_attribute_formset': BrandAttributeFormset()
        )

但看来我得想办法把这些表格中检索到的数据传递给第二步了。

你知道怎么做吗?

谢谢!

【问题讨论】:

【参考方案1】:

我已经对我的模型进行了一些重构,以便能够在 process_step 的每个步骤中保存每个模型。我也在会话中存储信息。

【讨论】:

以上是关于具有一个模型和 inlineformset 的 Formwizard的主要内容,如果未能解决你的问题,请参考以下文章

更改非父模型的 inlineformset 中模型字段的查询集

formset、inlineformset_Factory 和 kwargs

Django - 修改Inlineformset删除按钮

测试 InlineFormset 清理方法

在 Django 的 inlineformset_factory 中选择外键元素的子集

在 Django inlineformset_factory 中过滤查询集