0

I am using inlineformset_factory to save data. I am able to add data, edit existing data. Issue is with edit I am able to add more line items, but how do I delete existing line items?

Views.py

@login_required
def edit_invoice(request,pk):    
    product = serviceinvoice.objects.get(pk=pk)
    if product.user != request.user:
        raise PermissionDenied
    new_formset=createinvoiceformsetedit(instance=product)
    if request.method == 'POST':        
        inv_form=createinvoiceformedit(user=request.user,data=request.POST,instance=product)        
        if inv_form.is_valid():
            new_form=inv_form.save(commit=False)
            new_form.user=request.user
            new_formset=createinvoiceformsetedit(request.POST,instance=new_form)
            if new_formset.is_valid():
                new_form.save()
                hero=new_formset.save(commit=False)
                for hero1 in hero:
                    hero1.user=request.user
                    hero1.save()
                return HttpResponseRedirect(reverse('invoicelist'),{'section':'editinvoice'})
    else:
        inv_form=createinvoiceformedit(request.user,instance=product)
    return render(request,'account/editinvoice.html',{'inv_form':inv_form,'new_formset':new_formset})

I can see delete check option in my rendered table, however even on selecting the Delete check option, data is not deleted and field required error is displayed.

  • 1
    Possible duplicate of [Dynamically Delete inline formsets in Django](http://stackoverflow.com/questions/2357059/dynamically-delete-inline-formsets-in-django) – solarissmoke Apr 23 '16 at 05:34
  • @solarissmoke Updated question. I can see Delete checkoption but it does not work. Even after selecting Delete check option, field required error is displayed. – CA Pulkit Sharma Apr 23 '16 at 06:01
  • This doesn't happen automatically - you need to have client site Javascript to set the field to be deleted. That's why the post I have linked to suggests using django-dynamic-formset. – solarissmoke Apr 23 '16 at 06:40
  • @solarissmoke Dynamic adding is different thing. Will go to that in next step of App. As of now I can see Delete checkbox but on selecting it data does not delete. What should be coded that inline form if edited gets saved, delete check box selected then particular raw gets deleted from DB. – CA Pulkit Sharma Apr 23 '16 at 06:46

1 Answers1

0

Got the answer by trying different things.

Solution:

def edit_invoice(request,pk):    
    product = serviceinvoice.objects.get(pk=pk)
    if product.user != request.user:
        raise PermissionDenied
    new_formset=createinvoiceformset(instance=product)
    if request.method == 'POST':        
        inv_form=createinvoiceform(user=request.user,data=request.POST,instance=product)        
        if inv_form.is_valid():
            new_form=inv_form.save(commit=False)
            new_form.user=request.user
            new_formset=createinvoiceformset(request.POST,instance=new_form)
            if new_formset.is_valid():
                new_form.save()
                try:
                    new_formset.save()
                except:
                    hero=new_formset.save(commit=False)
                    for hero in hero:
                        hero.user=request.user
                        hero.save()
                return HttpResponseRedirect(reverse('invoicelist'),{'section':'editinvoice'})
    else:
        inv_form=createinvoiceform(request.user,instance=product)
    return render(request,'account/editinvoice.html',{'inv_form':inv_form,'new_formset':new_formset})

Solution

try:, except: worked like a charm.