当前位置: 首页 > 面试题库 >

使用Ajax将表单动态添加到Django表单集中

赵献
2023-03-14
问题内容

我想使用Ajax自动将新表单添加到Django表单集中,以便当用户单击“添加”按钮时,它将运行JavaScript,该JavaScript将新表单(属于表单集的一部分)添加到页面中。


问题答案:

这就是我使用jQuery的方式:

我的模板:

<h3>My Services</h3>
{{ serviceFormset.management_form }}
{% for form in serviceFormset.forms %}
    <div class='table'>
    <table class='no_error'>
        {{ form.as_table }}
    </table>
    </div>
{% endfor %}
<input type="button" value="Add More" id="add_more">
<script>
    $('#add_more').click(function() {
        cloneMore('div.table:last', 'service');
    });
</script>

在一个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作为第一个参数,typeformset的作为第二个参数。什么是selector应该做的是把它传递它应该复制。在这种情况下,我将其传递给div.table:lastjQuery,以查找带有类的最后一个表table。它的:last一部分很重要,因为selector还可用于确定将在其后插入新表格的内容。你很可能希望在其余表格的末尾使用它。该type论点是,这样我们就可以更新management_form领域,特别是TOTAL_FORMS,还有实际的表单字段。如果你有一个充满Client模型的表单集,则管理字段的ID为id_clients-TOTAL_FORMSid_clients-INITIAL_FORMS,而表单字段的格式id_clients-N-fieldnamewithN是表格编号,以开头0。因此,使用该type参数,该cloneMore函数将查看当前有多少个表单,并遍历新表单中的每个输入和标签,从而替换诸如id_clients-(N)-nameto id_clients-(N+1)-name等的所有字段名称/ id 。完成后,它将更新TOTAL_FORMS字段以反映新表单并将其添加到集合的末尾。

此功能对我特别有用,因为它的设置方式使我可以在整个应用程序中使用它(当我想在表单集中提供更多表单时),而不必让我需要隐藏的“模板”表单来进行复制只要我通过它,表单集名称和表单的布局格式。希望能帮助到你。



 类似资料:
  • 问题内容: 有没有办法可以从python发送表单的(css)类?例如: 这呈现了一个简单的文本字段,但是我希望该文本字段具有的CSS类,是否可以直接从python进行? 我知道我可以直接从python 放一个,但不能放一个类。 更新:我尝试了,但没有成功,我得到了: 问题答案: WTForms不允许你在字段初始化中设置显示选项(例如类名)。但是,有几种方法可以解决此问题: 如果你所有的字段都应包含

  • 问题内容: 我的表格中有3个字段。我有一个提交按钮和一个“添加其他字段”按钮。我知道我可以使用表单类中的方法添加字段。 我是Python和Django的新手,并且陷入了一个初学者的问题;我的问题是: 当我单击“添加其他字段”按钮时,添加其他字段的过程是什么? 是否需要再次呈现表单? 我如何以及何时打电话,甚至必须打电话? 如何将参数传递给? 问题答案: 你的表单必须基于从POST传递给它的一些变量

  • 我读过许多关于动态添加字段集的博客和帖子,但它们都给出了非常复杂的答案。我要求的不是那么复杂。 我的HTML代码: 因此,用户将在字段中输入一个整数值(我正在使用javascript检查验证)。点击链接,会出现相应数量的输入字段供他输入。我想用javascript实现这一点。 我不是javascript方面的专家。我在想如何通过链接检索用户在字段中填写的整数,并显示相应数量的输入字段。

  • 问题内容: 我已经做了一个不错的表格,并使用了一个复杂的“添加”函数来处理它。像这样开始 现在,我真的不想重复该方法中的所有功能,因此我想可以使用完全相同的模板,甚至可以id在表单中添加一个字段,以便该函数知道其正在编辑的内容。但这有几个问题 我将在哪里放置功能?之所以必须在此之后,是因为这是创建文章的地方,但它甚至永远都不会达到那个目的,因为由于唯一的约束,表单是无效的(除非用户编辑了所有内容)

  • 问题内容: 在Django中,我具有以下代码,该代码在HTML页面上创建用户名和密码表单: 我想在该字段中添加“用户名”和“密码”占位符文本,然后在用户单击该字段时消失。实现此目标的最佳方法是什么? 问题答案: 您必须使用占位符属性 要么

  • 问题内容: 首先,我是Django的新手,几乎完全不熟悉AJAX和jQuery。 我在本地开发。 因此,我正在尝试实现一个HTML表,该表在AJAX的帮助下每X秒钟动态刷新一次(无需页面刷新),但是我似乎无法使我的代码正常工作。 (如果我有足够的代表,我可能会回答这个问题,或者从聊天中寻求帮助,但我还没有那么高兴) 我一直在努力使它工作10多个小时,而我开始感到无助。我一直在疯狂地搜索网络,但是这