Python Django表单复制数据

Python Django表单复制数据,python,django,forms,Python,Django,Forms,我试图从一个表单中获取数据,该表单根据列表被复制多次。每个项目一份表格。表单由一个复选框和一个文本字段组成。如果选中该复选框,则我还需要附带的文本字段数据 我在这里问了一个相关的问题: 这已经基本解决了,但现在我有了一个新问题 视图: 上面没有显示,但是now=timezone.now() 模板: <form action="" method="post"> {% csrf_token %} {% for item in item_list %}

我试图从一个表单中获取数据,该表单根据列表被复制多次。每个项目一份表格。表单由一个复选框和一个文本字段组成。如果选中该复选框,则我还需要附带的文本字段数据

我在这里问了一个相关的问题:

这已经基本解决了,但现在我有了一个新问题

视图:

上面没有显示,但是
now=timezone.now()

模板:

<form action="" method="post">

    {% csrf_token %}

    {% for item in item_list %}
        <input type="checkbox" name="item" value="{{item.id}}">{{item.name}} <input type="text" name="price"><br>
    {% endfor %}

    <input type="submit" value="Add Items">

</form>

{%csrf_令牌%}
{项列表%中的项的百分比}
{{item.name}}
{%endfor%}

当我提交表单时,它现在会在两个循环中运行两次,并且所有项目的最终价格都是相同的。我通过在代码中插入打印函数并分析显示内容来确定这一点。我想我了解问题所在,问题是如何纠正它,非常感谢您的帮助。

您的模板多次重复以下内容:

<input type="checkbox" name="item" value="{{item.id}}">{{item.name}} <input type="text" name="price">
然后回到视图中,使用此循环查找匹配对:

for key, value in request.POST.iteritems():
    if not name.startswith('item_'):
        continue
    name, item_id = key.split('_')
    if name == 'item':
        price = request.POST.get('price_%s' % item_id)
        # fetch the item, set the price

不要使用
list
作为变量名,它是一种内置的数据类型。这不是变量的实际名称,我更改了几个以使其更具可读性。我不完全理解views.py代码“for key,value”的第一行中发生了什么。特别是什么是关键和价值。这很有意义,谢谢。最后一件事,为什么它是key.spit而不是value.split?不幸的是,这不起作用,它返回一个错误
需要超过1个值才能解包
name,item\u id=key.split(“')
是字段
name
,而
是字段的值。这些键将是“项目”或“价格”。如果表单中有其他字段(名称中没有带“_”)的字段,您将看到该错误。我在视图中添加了一行以捕获此案例。
<input type="checkbox" name="item_{{item.id}}">{{item.name}}
<input type="text" name="price_{{item.id}}">
for key, value in request.POST.iteritems():
    if not name.startswith('item_'):
        continue
    name, item_id = key.split('_')
    if name == 'item':
        price = request.POST.get('price_%s' % item_id)
        # fetch the item, set the price