gpt4 book ai didi

python - Django - 如何获取输入列表,选择使用 javascript 动态创建的?

转载 作者:行者123 更新时间:2023-12-01 02:11:03 25 4
gpt4 key购买 nike

我有一个 JavaScript 代码来根据动态添加的特征创建所有产品组合。该脚本的 HTML 结果是:

<form id="myWizard" action="" method="post" role="form">    
<table>
<tbody>
<tr>
<td>1</td>
<td><select id="combination[0].product" name="combination[0].product">
<option value="25">
product_desc pc.10
</option>
<option value="26">
product_desc pc.5
</option>
<option value="21">
product_desc
</option>
</select></td>
<td><input readonly="readonly" value="5.00" id="combination[0].price" name="combination[0].price" class="form-control" type="text" /></td>
<td><input readonly="readonly" value="a" id="combination[0].color" name="combination[0].color" class="form-control" type="text" /></td>
<td><input readonly="readonly" value="1" id="combination[0].quantity" name="combination[0].quantity" class="form-control" type="text" /></td>
</tr>

<tr>
<td>2</td>
<td><select id="combination[1].product" name="combination[1].product">
<option value="25">
product_desc pc.10
</option>
<option value="26">
product_desc pc.5
</option>
<option value="21">
product_desc
</option>
</select></td>
<td><input readonly="readonly" value="5.00" id="combination[1].price" name="combination[1].price" class="form-control" type="text" /></td>
<td><input readonly="readonly" value="a" id="combination[1].color" name="combination[1].color" class="form-control" type="text" /></td>
<td><input readonly="readonly" value="5" id="combination[1].quantity" name="combination[1].quantity" class="form-control" type="text" /></td>
</tr>

<tr>
<td>5</td>
<td><select id="combination[8].product" name="combination[8].product">
<option value="25">
product_desc pc.10
</option>
<option value="26">
product_desc pc.5
</option>
<option value="21">
product_desc
</option>
</select></td>
<td><input readonly="readonly" value="5.00" id="combination[8].price" name="combination[8].price" class="form-control" type="text" /></td>
<td><input readonly="readonly" value="c" id="combination[8].color" name="combination[8].color" class="form-control" type="text" /></td>
<td><input readonly="readonly" value="50" id="combination[8].quantity" name="combination[8].quantity" class="form-control" type="text" /></td>
</tr>
</tbody>
</table>
</form>

当然还可以有更多的特征(例如类型、 Material ......)。

如何使用 request.POST 处理它?我尝试了 getlist 但没有成功。作为记录,我使用 Django 1.9。有什么方法可以从这个请求中获取字典列表,这样我会得到类似的东西:

list = [{'product_id': '25', 'price':'5.00', 'color':'c', 'quantity':'50'},
{'product_id': '26', 'price':'5.00', 'color':'a', 'quantity':'1'},
{'product_id': '21', 'price':'5.00', 'color':'a', 'quantity':'5'}
]

或者类似的东西?

最佳答案

一种解决方案是直接操作 POST 数据,例如如下所示:

results = defaultdict(dict)
for k, v in request.POST.items():
_, no, key = re.split(r'\[(?P<no>\d+)\]\.', k, maxsplit=2)
results[no][key] = v
data = []
for value in results.values():
data.append(value)

生成的数据看起来像(使用当前表数据):

[{'product': '25', 'price': '5.00', 'color': 'a', 'quantity': '1'}, 
{'product': '25', 'price': '5.00', 'color': 'a', 'quantity': '5'},
{'product': '25', 'price': '5.00', 'color': 'c', 'quantity': '50'}]

这不会处理不遵循“combination[ ].name”约定的 POSTed 字段;您必须自己清除这些内容(例如,如果正则表达式失败,则将上面的代码包装在异常中,或者使用简单的 if 语句)。
也没有将数字转换为 float 或整数,因为 Django 无法知道输入类型是什么,因此假设所有内容都是字符串。

<小时/>

您可能需要重新考虑表单生成,特别是如果您想使用 Django。使用 Django 表单(甚至模型表单)会自动为您提供正确的输出格式,并提供正确的转换和类型检查。

看看Django's formsets ,这正是用于生成多个表单,并且似乎与您的示例表单非常接近。

(注意:截至目前,1.9 版文档上方有一个红色条,表明它是不安全且不受支持的 Django 版本。看看是否可以升级到 2.0。)

关于python - Django - 如何获取输入列表,选择使用 javascript 动态创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48696846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com