2013-02-28 120 views
0

我有一个内嵌的formset,其中extra = 24是一天中的小时。 我没有任何问题,添加新的条目并保存编辑具有多个实例的inlineformset_factory

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

我试图找出如何我可以编辑和保存的表单集的数据。我有一个查询集,返回应该填充formset的OreFarmaco的24个实例,但formset本身只有一个instance关键字。

OreSommInlineFormSet = inlineformset_factory(FarmacoGiornaliero,OreSomministrazione, 形式= OreForm,字段=( '矿', 'quantita'), 额外= 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() 

谢谢。

回答

0
//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() 
+0

当你说get(),你的意思是使用主键或id来检索数据?我的表单作为formset的24个附加项的列表,用户可以更改所有这些值。我怎么能按照你所建议的方式一一处理呢? – vince 2013-02-28 16:13:01

+0

是的,但你也可以使用get in all fields。 get()函数将返回一个数据。尝试改变过滤器来获取。例如,像这样:myospite = Ospite.objects.get(cognome = cognome,nome = nome) – catherine 2013-02-28 16:23:47

+0

好的,我会这么做的。那么formset呢?我是否必须更改我的HTML以适合您建议的鳕鱼? – vince 2013-02-28 16:28:04

相关问题