简体   繁体   中英

editing inlineformset_factory with multiple instance

I have an inline formset with extra=24 which are the hours of the day. I don't have any issue adding a new entry and saving

OreSommInlineFormSet = inlineformset_factory(FarmacoGiornaliero, OreSomministrazione, 
                                             form=OreForm,  fields=('ore','farmaco', 'quantita'), 
                                             extra=24, can_delete=False)        

myospite = Ospite.objects.filter(cognome=cognome).filter(nome=nome)[0]                 


if request.method == 'POST':                       


    form = GiornalieroForm(request.POST)
    formset = OreSommInlineFormSet(request.POST, prefix='formset')

    if form.is_valid() and formset.is_valid():                           


        giornaliero=form.save(commit=True)      

        for form in formset.forms:
            ora = form.save(commit=False)
            ora.farmaco = giornaliero
            ora.ospite = myospite               
            ora.save()                                    

I'm trying to figure out how I can edit and save data of the formset. I have a queryset that returns 24 instances of OreFarmaco which should populate the formset but the formset itself with the instance keyword foresees only one instance.

OreSommInlineFormSet = inlineformset_factory(FarmacoGiornaliero, OreSomministrazione, form=OreForm, fields=('ore', 'quantita'), extra=24, can_delete=False)

myospite = Ospite.objects.filter(cognome=cognome).filter(nome=nome)[0]

locfarmaco = Farmaco.objects.filter(farmaco=farmaco)[0]

giornaliero = FarmacoGiornaliero.objects.select_related() \
            .filter(ospite=myospite) \
            .filter(farmaco=locfarmaco)[0]

orefarmaco = OreSomministrazione.objects.select_related().filter(farmaco=giornaliero).filter(ospite=myospite)           

if request.method == "POST":                      

        form = GiornalieroForm(request.POST, instance=giornaliero)                     

        formset = OreSommInlineFormSet(request.POST, prefix='formset', instance=orefarmaco[0])


        if form.is_valid() and formset.is_valid():                                                             

            giornaliero=form.save(commit=True)   
            formset.save()   

Thank you.

//try to rewrite this codes it's complicated. Use get() instead
myospite = Ospite.objects.filter(cognome=cognome).filter(nome=nome)[0]
locfarmaco = Farmaco.objects.filter(farmaco=farmaco)[0]
giornaliero = FarmacoGiornaliero.objects.select_related() \
        .filter(ospite=myospite) \
        .filter(farmaco=locfarmaco)[0]
//

if request.method == "POST":                      
    form = GiornalieroForm(request.POST, instance=giornaliero)                     
    if form.is_valid():  
        gio = form.save(commit=True)                                                           
        formset = OreSommInlineFormSet(request.POST, instance=gio)
        if formset.is_valid()
            gio.save()   
            formset.save() 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM