如何创建列数和行数未知的表单?

How can I create a form with unknown number of columns and rows?

不知道能不能解释清楚,还请大家多多包涵,有需要的我会尽量更新where/when


我有一个 Django 应用程序,旨在从用户那里获取我们需要配置的产品的数据。产品分为主要产品的主要类别,然后按客户进一步拆分。主要产品具有默认设置,客户产品更改了其中一些设置,以及主要产品未列出的其他一些设置。每个客户也可能有多种产品变体。

产品示例:

Main Product A
|
|-> Customer A Product A1
|-> Customer A Product A2
|
|-> Customer B Product A1
|-> Customer B Product A2

Main Product B
|
|-> Customer A Product B1
|-> Customer A Product B2
|
|-> Customer B Product B1
|-> Customer B Product B2

我 need/want 是一个 table 供员工为给定客户输入所需设置的应用程序,而应用程序不知道需要多少设置以及有多少客户产品,提前。

示例:

设置 产品 A1 +
低功耗 正确
延迟开始 5 秒
+

如果用户随后点击加号(只是一个示例方法,也可以在此处接受建议),则会出现另一列,他们可以在其中输入产品名称(例如“产品 A2”)并开始编辑数据针对相同设置值的该产品:

设置 产品 A1 产品 A2 +
低功耗 正确 错误
延迟开始 5 秒 5 秒
+

然后当准备好并保存表单时,表单将像两个单独的表单一样提交,其中两个重复“设置”,并且产品特定列被分开,如下所示:

Product:
Product A1

Settings:
Low Power = TRUE
Delayed Start = 5 seconds
Product:
Product A2

Settings:
Low Power = FALSE
Delayed Start = 5 seconds

首先,上面的可能吗?从逻辑上讲,我认为这是可能的,但我对框架太陌生,不知道从哪里开始寻找解决方案。

其次,如果不能像上面那样,我可以把这个页面之前的产品拿进来,然后在这个页面上有一个已知的列数,但仍然需要以相同的方式工作,他们在提交时共享第一列,但我仍然不知道行数。如果这样可以降低复杂性,那么这绝对是一个选择。

还有,我理解这可能被解读为“为我做我的项目”,这与事实相去甚远。我想了解如何做到这一点,而不仅仅是让它工作然后忘记它。我也需要能够支持这个应用程序的发展。因此,如果您甚至能够帮助我了解我需要查找什么才能朝着正确的方向前进,我仍然会非常感激!


提前致谢。

我想你想要的是Formset

这些显示的默认方式是转置您的插图:单击“添加”按钮会在底部创建另一个表单实例。

如果你想使用formset视图实现“添加一组X类型的实体”,你可以动态构造一个表单,其中X是用户先前选择的,其相关字段在运行-时间.

我见过(但没有写过!)的另一种方法是使用前端框架构建数据网格,POST 它是 JSON。 Django 可以使用具有单个 JSON 字段的表单将此 JSON 解码为 Python 数据,然后处理该数据。请注意,如果您这样做,您必须对其进行验证以使您满意。您不能相信任何来自执行 POST 的可能敌对演员的任何信息。 Django 表单提供了一个很好的验证框架,即使您从不显示它们。只需用未经验证的数据字典实例化它们并检查 form.is_valid()

我在这里坚持泛泛而谈。希望这会给你一些指导。