Django 中的复杂表单小部件

Posted

技术标签:

【中文标题】Django 中的复杂表单小部件【英文标题】:Complex form widgets in Django 【发布时间】:2011-02-10 23:54:37 【问题描述】:

我正在寻找在 Django 中生成一个相当复杂的表单的好帮手库。

动态字段依赖关系:假设选择了选项 a,则显示/隐藏某些字段,其中的子集是强制性的,具体取决于选项选择。

添加更多:单击“添加更多”按钮会克隆一些小部件。

这是 ToscaWidgets 能够处理的事情。

http://toscawidgets.org/documentation/tw.dynforms/tutorial.html#growing

Some working ToscaWidgets Demos

目前我正在使用一些 jquery 代码来管理它,但并不完全满意。遗憾的是由于某种原因无法使用 ToscaWidgets。

TIA

【问题讨论】:

【参考方案1】:

我使用了一个高度定制的Formset 来制作一个具有复杂用户权限依赖关系的相当复杂的表单。这涉及到子类化django.forms.formsets.BaseFormSet,覆盖__init__add_fieldsis_validsave,当然还有使用定制的Form。最终的产品有点毛茸茸,但我在 6 个月左右后仍然能够理解和修改它。

我没有使用 Formset 功能来处理添加和减去子表单,但这应该可以满足您的需求。

文档地址:http://docs.djangoproject.com/en/1.1/topics/forms/formsets/

【讨论】:

【参考方案2】:

经过一番搜索,我找到了一个解决方案。 django-dynamic-formset 基于 django formsets 解决了这个目的。令人印象深刻的工作

PS:稍后会尝试添加一些截图。

【讨论】:

以上是关于Django 中的复杂表单小部件的主要内容,如果未能解决你的问题,请参考以下文章

Django:使用小部件来限制 ModelForm 中的选择

Django ForeignKey 表单字段小部件

如何对 Django Select 小部件中的选择进行分组?

Django 表单和引导程序 - 添加小部件有效但不完全

替换表单的默认多对多小部件

Django:如何更改内联表单集中的字段小部件