具有一个模型和 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