【问题标题】:editing inlineformset_factory with multiple instance使用多个实例编辑 inlineformset_factory
【发布时间】:2013-02-14 21:08:12
【问题描述】:

我有一个内联表单集,其中 extra=24 是一天中的几个小时。 添加新条目并保存没有任何问题

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

我正在尝试弄清楚如何编辑和保存表单集的数据。我有一个查询集,它返回 24 个 OreFarmaco 实例,它应该填充表单集,但带有 instance 关键字的表单集本身只能预测一个实例。

OreSommInlineFormSet = inlineformset_factory(FarmacoGiornaliero, OreSommministrazione, form=OreForm, fields=('ore', '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()   

谢谢。

【问题讨论】:

    标签: django inline-formset


    【解决方案1】:
    //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() 
    

    【讨论】:

    • 当你说get()时,你的意思是使用主键或id来检索数据?我的表单作为 formset 的 24 个附加项的列表,用户可以更改所有这些值。我怎么能按照你建议的方式一一处理?
    • 是的,但您也可以在所有字段中使用 get。 get() 函数将返回一个数据。尝试更改过滤器以获取。例如,像这样: myospite = Ospite.objects.get(cognome=cognome, nome=nome)
    • 好的,我会这样做的。那么表单集呢?我是否必须更改我的 html 以适应您建议的鳕鱼?
    • 我不知道,我没有在 html 中看到您的代码。你能把它贴在你的问题中吗
    • 对不起,我没有很好地解释我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2016-08-07
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多