我有一个显示多个Formset的页面,每个Formset都有一个前缀。表单集使用默认选项formset_factory
创建,包括extra=1
。可以使用JavaScript添加或删除行。Django formset - 仅当没有初始数据集时才显示额外字段?
如果用户正在添加新数据,则会出现一个空白行。完善。
如果用户已经添加了数据但表单验证失败,在这种情况下,表单集使用了MyFormset(data, prefix='o1-formsetname')
等POST数据,只有他们输入的数据才显示出来。再次,完美。 (o1
等动态生成,每个o
对应一个“选项”,每个“选项”可能有多个表单集)。
但是,如果用户正在编辑现有的数据,在这种情况下,鉴于填充使用MyFormset(initial=somedata, prefix='o1-formsetname')
其中somedata
是从数据库中的一个模型来的数据的类型的字典列表中的表单集,一个额外的空白行该数据之后插入。除非用户使用JavaScript明确添加一行,否则不需要显示空白行。
是否有任何简单的方法来防止formset显示额外的行,如果初始数据设置?我在第三个例子中使用initial
的原因是,如果我刚刚使用MyFormset(somedata, prefix='o1-formsetname')
来传递数据,则必须将所有数据重新格式化为包含每个字段的前缀的POSTdata样式字典,例如o1-formsetname-1-price: x
以及计算管理形式的数据,这增加了整个负荷的复杂性。
一种解决方案可能是拦截表单集,然后再将其发送到模板,并手动删除该行,但extra_forms
属性似乎没有可写的,并设置extra
到0
没有任何区别。我也可以让JavaScript检测这种情况并删除该行。然而,我不禁想到我错过了一些明显的事情,因为我想要的行为是对我来说似乎是合理的预期行为。
谢谢。
我使用Django 1.1,其中'max_num'参数的行为不同;见下面的回复。 – garybryan