I am trying to implement a django formset (where user may dynamically add/remove forms from formset).
I use JS to add new rows (using empty_form):
$("#add-item").click(function(e){
e.preventDefault();
var count = parseInt($('#id_form-TOTAL_FORMS').val());
$('.invoice-items').append($('#empty_invoice_item').html().replace(/__prefix__/g, count));
$('#id_form-TOTAL_FORMS').attr('value', count+1);
$(".invoice-items .invoice-item .col-lg-9 .form-group:last-child").last().append('<a href="#" class="delete-item"><i class="glyphicon glyphicon-remove"></i></a>')
});
I also use JS to set DELETE flag on specific forms. Everything is passed to the view.
My view (part) code:
invoice_form = InvoiceForm()
invoice_item_helper = InvoiceItemHelper
InvoiceItemFormset = formset_factory(InvoiceItemForm, extra=0, max_num=15, validate_max=True, min_num=1, validate_min=True, can_delete=True)
formset = InvoiceItemFormset()
if request.method == 'POST':
invoice_form = InvoiceForm(request.POST)
formset = InvoiceItemFormset(request.POST)
The problem is, django always displays all forms in the formset, even those marked for deletion. So, even there is something wrong in my invoice form and it doesn't validate, it will show invoice form with error message AND all forms (once again).
How can I remove completely forms which are marked for deletion in if request.method == 'POST':
block? Is it possible?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…