django form ajax,使用Ajax向Django窗体集动态添加表单

这篇博客介绍了如何利用jQuery实现动态添加表单的功能。通过定义一个`cloneMore`函数,可以复制并更新表单集中的最后一个表单,包括管理表单的`TOTAL_FORMS`字段。该函数遍历新表单的输入和标签,修改字段名和ID以适应新的表单数量,并在适当位置插入新表单。这种方法使得在应用程序中复用此功能变得简单,无需预先存在的模板表单。
摘要由CSDN通过智能技术生成

我就是这样做的,用jQuery:

我的模板:

My Services

{{ serviceFormset.management_form }}

{% for form in serviceFormset.forms %}    

{{ form.as_table }}    

{% endfor %}

$('#add_more').click(function() {

cloneMore('div.table:last', 'service');

});

在javascript文件中:function cloneMore(selector, type) {

var newElement = $(selector).clone(true);

var total = $('#id_' + type + '-TOTAL_FORMS').val();

newElement.find(':input').each(function() {

var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');

var id = 'id_' + name;

$(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');

});

newElement.find('label').each(function() {

var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');

$(this).attr('for', newFor);

});

total++;

$('#id_' + type + '-TOTAL_FORMS').val(total);

$(selector).after(newElement);}

它所做的:

cloneMore接受selector作为第一个论点,type作为第二种形式。这是什么selector应该做的是传递它应该复制的东西。在这种情况下,我通过它div.table:last类的jQuery查找最后一个表。table..这个:last其中的一部分很重要,因为selector也用于确定在后面插入什么新窗体。更有可能的是,你会希望它在其他表格的末尾。这个type参数,以便我们可以更新management_form字段,特别是TOTAL_FORMS,以及实际的表单字段。如果你有一套表格,比如说,Client模型,管理字段将具有id_clients-TOTAL_FORMS和id_clients-INITIAL_FORMS,而窗体字段的格式为id_clients-N-fieldname带着N作为表单编号,从0..所以说type争论cloneMore函数查看当前有多少个窗体,并遍历新表单中的每个输入和标签,替换来自以下内容的所有字段名/IDid_clients-(N)-name到id_clients-(N+1)-name诸若此类。完成后,它将更新TOTAL_FORMS字段以反映新窗体并将其添加到集合的末尾。

这个函数对我特别有帮助,因为它的设置方式允许我在整个应用程序中使用它,当我想要在一个窗体集中提供更多的表单时,并且不需要有一个隐藏的“模板”表单来复制,只要我把表单的名称和表单布局的格式传递给它。希望能帮上忙。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值