我正在尝试在django中创建动态/复杂的表单。
基本上我会有像ServerInfoForm,OperatingSystemForm,ApplicationForm ......等表格。
根据用户填写的方式,将显示其他表单。
例如,如果用户选择RedHat操作系统,则接下来会显示RedHatForm,如果选择MySQL和Apache等应用程序,则会在RedHatForm之后显示MySQLForm和ApacheForm。
从谷歌的角度来看,我觉得WizardForm View看起来是最好的答案。
但我担心使用WizardForm View可以使这些表单变得复杂,因为我们有6种不同的操作系统和30种不同的应用程序。哪个会及时增长。在一开始将有大约36个表格,所以我想知道是否有更好的方法?
由于
答案 0 :(得分:1)
我们最近遇到了类似的问题(每个部分都有动态表单/字段的分类广告 - 即汽车(品牌,型号,年份,颜色......),房屋(nb_rooms,花园......等) ,并使用臭名昭着的实体 - 属性 - 值(反)模式(http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model)进行解决。
在我们的案例中,我们将“Fields”模型(品牌,型号等)与“Sections”(“Cars”,“Houses”,...)相关联,每个“Field”配置了一个标签,一个“字段类型” “(负责构建表单字段,执行验证和存储/检索值的实现类的名称),以及一些特定于字段类型的配置(存储为json以使我们的情况更糟)。如果您不知道自己在做什么,那就太难看了,很容易搞得一团糟,但它很有用(用很多的单元测试和集成测试)而且非常少见硬编码的。
更糟糕的是,增加的复杂性和脆弱性是另一个争论 - 我们的客户坚持拥有“完全可配置的系统”但是 - 惊喜 - 从未打扰到目前为止重新配置任何东西