据我所知,即使是Django 1.5,也没有内置的嵌套表单集处理 - 即我有任意数量的组,我必须添加任意数量的成员,所有这些都来自于同一页。我目前正在尝试使用Nathan Yergler's method to do so,但它似乎在Django 1.5下被打破了。
该方法的要点是覆盖组表单集的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下成功部署过这个方法,或者有没有人有更好的方法来实现同样的目标?
轻微编辑:我的'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管理员,但可以分开并单独使用。要做到三个以上的水平,可以延长。
答案 1 :(得分:0)
所以我的问题的最终解决方案,不幸的是我不能说我完全理解它,可以在Andrei Petre(旧)博客上找到。 http://andreipetre.tumblr.com/post/26203496689/nested-formsets-with-django