2016-04-23 4 views
0

Ich verwende inlineformset_factory, um Daten zu speichern. Ich kann Daten hinzufügen, vorhandene Daten bearbeiten. Problem ist mit bearbeiten Ich kann mehr Werbebuchungen hinzufügen, aber wie lösche ich vorhandene Werbebuchungen?Django: inlineformset_factory nicht vollständige Daten aktualisieren, aber neue Daten zu bestehenden hinzufügen

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

Ich kann Prüfoption in meiner gerenderten siehe Tabelle löschen, aber auch die Delete Prüfoption auf die Auswahl, die Daten nicht gelöscht und Feld erforderlich Fehler angezeigt.

+1

Mögliche Duplikat [Dynamisch löschen Inline-Formularsätze in Django] (http://stackoverflow.com/questions/2357059/dynamically-delete-inline- formsets-in-django) – solarissmoke

+0

@solarissmoke Aktualisierte Frage. Ich kann Checkoption löschen sehen, aber es funktioniert nicht. Auch nach Auswahl der Check-Option Löschen wird der Feldfehler angezeigt. –

+0

Dies geschieht nicht automatisch - Sie müssen Client-Site-Javascript haben, um das zu löschende Feld festzulegen. Aus diesem Grund schlägt der Post, den ich verlinkt habe, vor, django-dynamic-formset zu verwenden. – solarissmoke

Antwort

0

Haben Sie die Antwort, indem Sie verschiedene Dinge ausprobieren.

Lösung:

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

Lösung

try:, except: worked like a charm.