Python 使用Ajax从Django表单集中动态删除表单
我想在按下删除链接时动态删除表单。我尝试过这个解决方案,但这个解决方案的问题是它只从html中删除表单,而不从表单集中删除表单。所以,我试着从解决方案和这个改变 以下是我的进展: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
<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