gpt4 book ai didi

Django formset - 只有在没有初始数据集时才显示额外的字段?

转载 作者:行者123 更新时间:2023-12-04 02:15:58 24 4
gpt4 key购买 nike

我有一个显示多个 Formsets 的页面,每个 Formsets 都有一个前缀。使用 formset_factory 创建表单集默认选项,包括 extra=1 .可以使用 JavaScript 添加或删除行。

如果用户正在添加新数据,则会显示一个空白行。完美的。

如果用户添加了数据但表单验证失败,在这种情况下,使用 MyFormset(data, prefix='o1-formsetname') 用 POST 数据填充表单集。等,只显示他们输入的数据。再次,完美。 (o1等是动态生成的,每个o对应一个“选项”,每个“选项”可能有多个formset)。

但是,如果用户正在编辑现有数据,在这种情况下, View 会使用 MyFormset(initial=somedata, prefix='o1-formsetname') 填充表单集。哪里somedata是来自数据库中模型的数据的字典列表,在此数据之后插入一个额外的空白行。我不希望出现空白行,除非用户使用 JavaScript 明确添加一个。

如果设置了初始数据,是否有任何简单的方法可以防止表单集显示额外的行?我使用的原因 initial在第三个例子中,如果我只是在 using MyFormset(somedata, prefix='o1-formsetname') 中传递数据我必须做一个额外的步骤,将所有数据重新格式化为 POSTdata 样式的字典,包括每个字段的前缀,例如 o1-formsetname-1-price: x等等,以及计算管理表格数据,这增加了整个复杂性。

一种解决方案可能是在将表单集发送到模板之前拦截它并手动删除该行,但 extra_forms属性似乎不可写和设置 extra0没有任何区别。我也可以让 JavaScript 检测到这种情况并删除该行。但是,我不禁认为我遗漏了一些明显的东西,因为我想要的行为对我来说似乎是明智的预期行为。

谢谢。

最佳答案

使用 max_num formset_factory 的关键字参数:

MyFormset = formset_factory([...], extra=1, max_num=1)

更多详情,请查看 limiting the maximum number of forms .

一个问题:大概您希望能够处理多个空白表单。这并不太难;只要确保您不使用 max_num POST 处理端的关键字参数。

关于Django formset - 只有在没有初始数据集时才显示额外的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com