Django请求.POST循环

thigvfpy  于 2022-11-18  发布在  Go
关注(0)|答案(1)|浏览(165)

我如何循环请求数据并将其作为一行发布到数据库中,用户可以提交多个描述、长度等,我遇到的问题是在数据库中创建大量行以获得最后一个A1的正确格式,但用户可以提交A1,1,1,1; A2,2,2,8,100等作为其一个动态添加窗体)

descriptions  = request.POST.getlist('description')
    lengths = request.POST.getlist('lengthx')
    widths = request.POST.getlist('widthx')
    depths = request.POST.getlist('depthx')
    quantitys = request.POST.getlist('qtyx')
    for description in descriptions:
        for lengt in lengths:
            for width in widths:
                for depth in depths:
                    for quantity in quantitys:
                        newquoteitem = QuoteItem.objects.create(  
                        qdescription=description,
                        qlength=lengt,
                        qwidth=width,
                        qdepth=depth,
                        qquantity=quantity,
                        quote_number=quotenumber,
                        )

bottom entry is correct
post system

jdzmm42g

jdzmm42g1#

第一个解决方案

使用formsets。这正是它们应该处理的。

第二个解决方案

descriptions = request.POST.getlist('description')返回了一个 all 描述的列表,假设有5个,它迭代了5次。现在lengths = request.POST.getlist('lengthx')是一个 all 长度的列表,同样是5个,所以它将迭代5次,因为它嵌套在for循环的描述中,所以它迭代了25次!
因此,尽管我仍然认为表单集是可行的方法,但您可以尝试以下方法:

descriptions = request.POST.getlist('description')
lengths = request.POST.getlist('lengthx')
widths = request.POST.getlist('widthx')
depths = request.POST.getlist('depthx')
quantitys = request.POST.getlist('qtyx')

for i in range(len(descriptions)):
    newquoteitem = QuoteItem.objects.create(  
        qdescription=descriptions[i],
        qlength=lengths[i],
        qwidth=widths[i],
        qdepth=depths[i],
        qquantity=quantitys[i],
        quote_number=quotenumber,
    )

这里,如果有5个描述,那么len(descriptions)将是5,并且有 * 一个 * 循环,其将总共迭代5次。

相关问题