Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Ajax从Django表单集中动态删除表单_Python_Html_Jquery_Django - Fatal编程技术网

Python 使用Ajax从Django表单集中动态删除表单

Python 使用Ajax从Django表单集中动态删除表单,python,html,jquery,django,Python,Html,Jquery,Django,我想在按下删除链接时动态删除表单。我尝试过这个解决方案,但这个解决方案的问题是它只从html中删除表单,而不从表单集中删除表单。所以,我试着从解决方案和这个改变 以下是我的进展: <form class="form-horizontal" method="POST" action=""> {% csrf_token %} <h3>Ingredients</h3> {{ formset.m

我想在按下删除链接时动态删除表单。我尝试过这个解决方案,但这个解决方案的问题是它只从html中删除表单,而不从表单集中删除表单。所以,我试着从解决方案和这个改变

以下是我的进展:

<form class="form-horizontal" method="POST" action="">
  {% csrf_token %}
  <h3>Ingredients</h3>

  {{ formset.management_form }}

  <div class="form-list">
    {% for form in formset.forms %}
      <div class='table'>
        <a class="remove-form" href="#">remove</a>
        <table class='no_error'>
          {{ form.as_table }}
        </table>
      </div>
    {% endfor %}
  </div>
  <input type="button" value="Add More" id="add_more">

  <div class="row spacer">
    <div class="col-4 offset-2">
      <button type="submit" class="btn btn-block btn-primary">Create</button>
    </div>
  </div>
</form>

<script>
  function updateElementIndex(el, prefix, ndx) {
    var id_regex = new RegExp('(' + prefix + '-\\d+)');
    var replacement = prefix + '-' + ndx;
    if ($(el).attr("for")) $(el).attr("for", $(el).attr("for").replace(id_regex, replacement));
    if (el.id) el.id = el.id.replace(id_regex, replacement);
    if (el.name) el.name = el.name.replace(id_regex, replacement);
  }

  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);
  }

  function deleteForm(prefix, btn) {
    var total = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val());
    if (total > 1){
      btn.parent().remove();
      var forms = $('.form-list');
      $('#id_' + prefix + '-TOTAL_FORMS').val(forms.length);
      for (var i=0, formCount=forms.length; i<formCount; i++) {
        $(forms.get(i)).find(':input').each(function() {
          updateElementIndex(this, prefix, i);
        });
      }
    }
    return false;
  }

  $('#add_more').on('click', function() {
    cloneMore('div.table:last', 'form');
  });

  $(document).on('click', '.remove-form', function(e){
    e.preventDefault();
    deleteForm('form', $(this));
    return false;
  });
</script>

{%csrf_令牌%}
成分
{{formset.management_form}
{formset.forms%%中表单的%
{{form.as_table}}
{%endfor%}
创造
函数updateElementIndex(el、前缀、ndx){
var id_regex=new RegExp('('+前缀+'-\\d+);
var替换=前缀+'-'+ndx;
如果($(el).attr(“for”))$(el).attr(“for”,$(el).attr(“for”).replace(id_regex,replacement));
如果(el.id)el.id=el.id.replace(id_regex,替换);
如果(el.name)el.name=el.name.replace(id_regex,replacement);
}
函数cloneMore(选择器,类型){
var newElement=$(选择器).clone(true);
var total=$('#id'+type+'-total_FORMS').val();
newElement.find(':input').each(function(){
变量名称=$(this.attr('name').replace('-'+(total-1)+'-','-'+total+'-');
变量id='id_u'+名称;
$(this.attr({'name':name,'id':id}).val('').removeAttr('checked');
});
newElement.find('label')。每个(函数(){
var newFor=$(this.attr('for').replace('-'+(total-1)+'-','-'+total+'-');
$(this.attr('for',newFor));
});
总计++;
$('#id'+type+'-TOTAL_FORMS').val(总计);
$(选择器).after(新元素);
}
函数deleteForm(前缀,btn){
var total=parseInt($('#id'+prefix+'-total_FORMS').val();
如果(总数>1){
btn.parent().remove();
var forms=$('.form list');
$('#id'+prefix+'-TOTAL#u FORMS').val(FORMS.length);
对于(var i=0,formCount=forms.length;i