Próbuję zaimplementować zestaw django (w którym użytkownik może dynamicznie dodawać/usuwać formularze z zestawu).Usuwanie formularza z zestawu Django
używam JS, aby dodać nowe wiersze (korzystając 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>')
});
Używam również JS ustawić flagę DELETE na konkretnych formach. Wszystko jest przekazywane do widoku.
Mój pogląd (część) Kod:
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)
Problem polega na tym, Django zawsze wyświetla wszystkie formularze w formset, nawet te zaznaczone do usunięcia. Tak więc, nawet jeśli coś jest nie tak w mojej fakturze i nie zostanie zatwierdzone, pojawi się formularz faktury z komunikatem o błędzie I wszystkimi formularzami (po raz kolejny).
Jak mogę usunąć całkowicie formularze oznaczone do usunięcia w bloku if request.method == 'POST':
? Czy to możliwe?
Czy próbujesz usunąć formularze oznaczone do usunięcia po nieudanym POST lub po udanym POST? – spectras
Jakiej wersji django używasz. Pokaż również pełny fragment kodu, w tym forms.py i views.py. –