首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django for循环保存实例

Django for循环保存实例
EN

Stack Overflow用户
提问于 2020-05-16 07:08:52
回答 1查看 109关注 0票数 0

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

这是代码

代码语言:javascript
复制
        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()只工作一次?

最合适的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-05-16 09:44:53

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

不管怎样,

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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")

解决方案可以是这样的。你可以使用,

代码语言:javascript
复制
    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()

但是我不认为你需要在这里初始化一个表单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61829739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档