首页 > 解决方案 > Django for 循环保存实例

问题描述

我有一个表单,它有两个输入字段,它们返回必须解析并添加到数据库中的 id 值。

这是代码

        if form_stage_1.is_valid() and form_stage_2.is_valid():
        # GET the new TP to pass to the next instance

        form_stage_1.instance.created_by = self.request.user
        new_tp = form_stage_1.save()


        # Parse and add suppliers to the TP
        for supplier_id in request.POST["supplier"]:
            form_stage_2.instance.counterpart = Counterpart.objects.get(pk=supplier_id)
            form_stage_2.instance.side = 1
            form_stage_2.instance.save()
            form_stage_2.instance.transaction_proposal.add(new_tp)


        # Parse and add clients to the TP
        for client_id in request.POST["client"]:
            form_stage_2.instance.counterpart = Counterpart.objects.get(pk=client_id)
            form_stage_2.instance.side = 2
            form_stage_2.instance.save()
            form_stage_2.instance.transaction_proposal.add(new_tp)

        messages.success(request, "TP created successfully".format())
        return redirect("add-tp")

不幸的是只添加了一个客户端..为什么 form_stage_2.instance.save() 只工作一次?

什么是最合适的方式

标签: pythondjango

解决方案


首先,你有两张表格要填写吗?

反正,

for supplier_id in request.POST["supplier"]:
            form_stage_2.instance.counterpart = Counterpart.objects.get(pk=supplier_id)
            form_stage_2.instance.side = 1
            form_stage_2.instance.save()
            form_stage_2.instance.transaction_proposal.add(new_tp)

这行不通。我相信你不能多次保存表单实例。

if form_stage_1.is_valid() and form_stage_2.is_valid():
    form_stage_1.instance.created_by = self.request.user
    new_tp = form_stage_1.save()

    # Parse and add suppliers to the TP
    for supplier_id in request.POST["supplier"]:
        data = {
            'counterpart':Counterpart.objects.get(pk=supplier_id),
            'side':1
            'transaction_proposal':[new_tp]
        }
        stage2_instance = Stage2ModelClass.objects.create(**data)


    # Parse and add clients to the TP
    for client_id in request.POST["client"]:
        data = {
            'counterpart':Counterpart.objects.get(pk=client_id),
            'side':2
            'transaction_proposal':[new_tp]
        }
        stage2_instance = Stage2ModelClass.objects.create(**data)

    messages.success(request, "TP created successfully".format())
    return redirect("add-tp")

解决方案可能有点像这样。您可以使用,

    for client_id in request.POST["client"]:
        data = {
            'counterpart':Counterpart.objects.get(pk=client_id),
            'side':2,
            'transaction_proposal':[new_tp]
        }
        form = FormClassStage2(data)
        if form.is_valid():
            form.save()

但我认为您不需要在这里初始化表单。


推荐阅读