用于在django formset中添加/删除表单的Javascript

时间:2015-03-30 21:30:38

标签: javascript ajax django django-forms

关于@Paolo Bergantino对this previous SO question的回答,我一直在尝试动态地将表单添加到我的formset中。但是,新添加的表单似乎与前一个表单“链接”。因此,单击新表单上的复选框会影响旧表单。此外,一旦我提交,帖子中只显示一个表格。所有其他新添加的东西发生了什么?

addAnother.js

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;

        if ($(this).attr('type') != 'hidden') {
            $(this).val('');
        }
        $(this).attr({'name': name, 'id': id}).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);
}

template.html

{% load crispy_forms_tags %}
<script src="{{ STATIC_URL }}js/addAnother.js" type="text/javascript"></script>
<form action="{% url 'databank:register' %}" method="post" enctype="multipart/form-data">

<div class="container">
    <div class="row" style="margin-top: 30px"> 
      <div class="col-md-10 col-md-offset-1">
        {{ dataset_form.media }}
        {% crispy dataset_form %}
        {% crispy facility_form %}
        {% crispy contact_form %}

        {{ author_formset.management_form }}
        {% for form in author_formset.forms %}
        <div class='table'>
          <table class='no_error'>
          {{ form.as_table }}
          </table>
        </div>
        {% endfor %}
        <input type="button" value="Add More" id="add_more">

        {% crispy terms_form %}

      </div>
    </div>
  </div>

  <div class="container">
    <div class="row">
      <div class="col-md-10 col-md-offset-1">
        <a role="button" class="btn btn-lg btn-default" href="{% url 'databank:databank_home' %}">Cancel</a>
        <input type="submit" class="btn btn-lg btn-success pull-right" value="Proceed to Data Upload">
      </div>
    </div>
  </div>
</form>



<script type="text/javascript">
    $('#add_more').click(function() {
        cloneMore('div.table:last', 'service');
    });

1 个答案:

答案 0 :(得分:0)

感谢django-users组中的Bill,我能够使用django-dynamic-formset来完成这项工作