首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Django中创建动态表单集?

如何在Django中创建动态表单集?
EN

Stack Overflow用户
提问于 2010-03-01 11:19:19
回答 3查看 30.1K关注 0票数 21

我是这样做的:

代码语言:javascript
复制
{{ formset.management_form }}
<table>
    {% for form in formset.forms %}
        {{ form }}
    {% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>   

下面是JS:

代码语言:javascript
复制
var form_count = {{formset.total_form_count}};
$('#add_form').click(function() {
    form_count++;
    var form = '{{formset.empty_form|escapejs}}'.replace(/__prefix__/g, form_count);
    $('#forms').append(form)
    $('#id_form-TOTAL_FORMS').val(form_count);
});

特别困扰我的是,我必须自己编写escapejs模板标记。它只是去掉所有的换行符并转义任何单引号,这样它就不会弄乱我的字符串。但是,在这种情况下,Django的制造者到底希望我们做什么呢?当他们可以使用像<input name="my_form_field[0]" />这样的数组,然后计算它的长度时,为什么他们有这个TOTAL_FORMS隐藏字段?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-02 02:56:15

在Django中有一些地方“原因”是因为Django管理应用程序就是这样实现的,我相信这就是其中之一。因此,答案是他们希望你实现自己的javascript。

查看这篇文章,向Dynamically adding a form...提问,了解更多javascript的想法。

还有两个可插拔的应用程序,django-dynamic-formsetdjango-dinamyc-form,直到现在我在查找第一个应用程序时才看到它们。

票数 7
EN

Stack Overflow用户

发布于 2010-08-11 08:44:47

这个问题有点老了,但我也花了一段时间才弄明白。

我建议在您的模板中将formset.empty_form呈现为隐藏字段,并在javascript中引用此字段。

下面是来自django admin站点的一个复杂的动态表单集示例:(但请注意,它尚未更新为使用empty_form...)

js

html template

票数 4
EN

Stack Overflow用户

发布于 2016-03-18 16:06:37

当使用formset.empty_form作为字符串,将'__prefix__'替换为实际的形式集表单索引时,存在一些可能的XSS。我的可插拔应用程序将formset.empty_form转换为Knockout.js模板,然后通过自定义Knockout.js绑定克隆该模板。当新添加的表单在带有内联表单集的整个表单提交之前被动态删除时,Knockout.js还会自动重新计算表单字段id索引。以下是文档:

https://django-jinja-knockout.readthedocs.org/en/latest/forms.html#dynamically-adding-new-related-formset-forms

当使用内联Knockout.js加载自定义字段时,Javascript绑定也会阻止XSS。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2353710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档