亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編輯 Django 表單集數據創建新記錄而不是更新

編輯 Django 表單集數據創建新記錄而不是更新

PHP
收到一只叮咚 2023-11-09 17:06:09
請幫忙!我正在嘗試通過主表單 pk 更新一組與主表單(項目信息)相關的表單集。創建表單工作正常,但我發現實現更新版本極其困難。這是另存為更新部分,我無法弄清楚formsets。主窗體正確更新數據庫。表單集只是創建新記錄而不是更新現有記錄。我不知道如何實例化表單集。這是代碼。view.py@login_requireddef edit_project(request):    SampleInformationFormSet = formset_factory(SampleInformationForm, extra=1)    DissolutionMethodsFormSet = formset_factory(DissolutionMethodsForm, extra=1)       form = ProjectInformationForm(request.POST or None)    si_formset = SampleInformationFormSet(request.POST or None, prefix='si')    d_formset = DissolutionMethodsFormSet(request.POST or None, prefix='d')        if request.method == 'POST':        form = ProjectInformationForm(request.POST or None)        si_formset = SampleInformationFormSet(request.POST or None, prefix='si')        d_formset = DissolutionMethodsFormSet(request.POST or None, prefix='d')        pi_pk = ''        p = ''        if form.is_valid():            pi_pk = form.cleaned_data['hd']            p = ProjectInformation.objects.get(pk=pi_pk)            form = ProjectInformationForm(request.POST, instance=p)            form.save()  # This form saves correctly        for si_form in si_formset:            si_form.save() # I do not know how to attach an instance to these formsets        for d_form in d_formset:            d_form.save()                    messages.success(request, 'Your project has been updated!')            return redirect('edit_project')        else:            pass        form = ProjectInformationForm(request.POST or None)        si_formset = SampleInformationFormSet(request.POST or None, prefix='si')        messages.warning(request, 'There was an error saving your form.')    study_id_select = list(        ProjectInformation.objects.values('dissolution_study_id', 'id').filter())    context = {'form': form, 'si_formset': si_formset, 'd_formset': d_formset, 'study_id_select': study_id_select}    return render(request, 'main/edit_project.html', context)
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

最后自己解決了。


@login_required

def edit_project(request):

    SampleInformationFormSet = formset_factory(SampleInformationForm, extra=1)

    DissolutionMethodsFormSet = formset_factory(DissolutionMethodsForm, extra=1)

   

    form = ProjectInformationForm(request.POST or None)

    si_formset = SampleInformationFormSet(request.POST or None, prefix='si')

    d_formset = DissolutionMethodsFormSet(request.POST or None, prefix='d')

    

    if request.method == 'POST':

        form = ProjectInformationForm(request.POST or None)

        si_formset = SampleInformationFormSet(request.POST or None, prefix='si')

        d_formset = DissolutionMethodsFormSet(request.POST or None, prefix='d')


        pi_pk = ''

        p = ''


        if form.is_valid():

            pi_pk = form.cleaned_data['hd']

            p = ProjectInformation.objects.get(pk=pi_pk)

            form = ProjectInformationForm(request.POST, instance=p)

            form.save()


        si = p.sampleinformation_set.all()  # All the Methods related to the instance

        d = p.dissolutionmethods_set.all()


        si_cnt = 0

        for si_form in si_formset:

            if si_form.is_valid():

               update = si_form.save(commit=False)

               update.pk = si[si_cnt].pk

               update.save()

               si_cnt += 1


        d_cnt = 0

        for d_form in d_formset:

            if d_form.is_valid():

                update = d_form.save(commit=False)

                update.pk = d[d_cnt].pk

                update.save()

                d_cnt += 1


查看完整回答
反對 回復 2023-11-09
  • 1 回答
  • 0 關注
  • 1532 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號