我在将数据从input type='number'发送到django视图时遇到问题。
我有一个包含产品的页面,每个页面都有一个复选框和一个数量选择(input type='number')。
<form action="{% url 'create-order' %}" method="POST">
{% csrf_token %}
<table class="table table-responsive table-borderless">
<thead>
<th> </th>
<th>Quantity</th>
</thead>
<tbody>
{% for item in items %}
<tr class="align-middle alert border-bottom">
<td>
<input type="checkbox" id="check" name="item" value="{{ item.id }}">
</td>
<td>
<input class="input" min="1" value=1 type="number" name="quantity">
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div class="submitButton">
<button type="submit" class="lgbtn green">Go to order</button>
</div>
</form>提交按钮转到视图:
def create_order(request):
quantities = request.POST.getlist('quantity')
items = request.POST.getlist('item')
return JsonResponse({
'quantities': quantities,
'items': items
})例如,我有6个id = 1,2,3,4,5,6的产品。如果我选择1,2,3并设置了数量: 3,4,5,那么我得到:
items = [1, 2, 3] # it's OK
quantities = [3, 4, 5, 1, 1, 1] # but I need [3, 4, 5]理想情况下,我希望项目和数量位于同一个对象中(例如[(1, 3), (2, 4), (3, 5)]或dict {1: 3, 2: 4, 3: 5}),但不一定,但无论如何,我只需要为已检查的项目选择数量。
发布于 2022-11-24 21:55:42
<input class="input" min="1" value=1 type="number" name="quantity">此标记基本上确保该值至少为1。
<input class="input" min="0" value=0 type="number" name="quantity">在下一部分中,您需要将正确的项与其数量匹配,如果数量为0,则跳过--但我们也需要一些错误检查,并执行必须知道哪种质量与哪个ID匹配的操作。
<input class="input" min="0" value=0 type="number" name="quantity-{{item.id}}">
def create_order(request):
#get fields from the form
items = request.POST.getlist('item')
#create a result array to hold pairs
result = []
for item in items:
quantity_name = "quantity-" + str(item)
item_quantity = request.POST.get(quantity_name)
if item_quantity==0:
#handle error submitted item with 0 quantity
else:
result.append( (item, item_quantity) )
return JsonResponse({
'result':result,
})虽然这不会检查未提交的数量为正的项目(为此您可能需要JS ),但它的行为将与您期望的表单行为一致。
https://stackoverflow.com/questions/74565401
复制相似问题