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