2013-07-23 158 views
1

据我所知,即使是从Django 1.5开始,也没有嵌入式窗体的内置处理 - 即我有任意数量的组,我必须添加任意数量的成员,全部来自同一页面。我目前正在尝试使用Nathan Yergler's method to do so,但它似乎在Django 1.5下被破坏。Django嵌套formset snag

该方法的要点是重写组窗体集的add_fields方法以包含成员的inline_formset。然而,当我在视图中创建一个GroupFormSet实例,不管我是否已经通过任何一组的情况下,我得到一个ValidationError: 'ManagementForm data is missing or has been tampered with'

例如,从我的观点的get_context_data一个片段:

group_inst = models.TemplateFieldGroup.objects.filter(name="Study")[0] 
context['group_formset'] = forms.GroupFormSet(instance=group_inst) 

有没有人在Django 1.5下成功部署了这个方法,或者是否有人有更好的方法来实现相同的目标?

轻微编辑:my'groups'实际上是一个更大伞的成员:一个Template对象具有多个TemplateFieldGroups,它们具有多个TemplateFields。但是,即使将GroupFormSet()传递给适当的Template实例也无法解决问题。

+0

您能否删除您的评论并将其添加到您的问题编辑中? –

回答

1

我最近有类似的问题。我通过基于StackOverflow的答案创建了一些自定义窗体和formset类来解决它:Django admin - inline inlines (or, three model editing at once)

此方法对Django 1.4很好,但在更新到Django 1.5时停止工作。为了解决它,我创建了一个github仓库:https://github.com/didorothy/mlrma

README.md更全面地解释了我的具体情况和目标。我的解决方案专注于Django管理员,但可以拆分并单独使用。要做到三个以上的层次,可以扩展。

+0

有趣!我必须尝试一下,但我不确定它是否能帮助我实现将我的界面EXTERNAL构建为管理员的目标。我目前正在使用django嵌套内联,它比你写的这个关系更麻烦,也更笨重(假设它按照你的建议工作),但真正的测试是用它构建一个定制的接口。 –