所以我的Django模板中有一个for循环,该循环在我的产品模型中循环通过一个产品。产品模型具有amount
属性,该属性应该在用户单击“添加”按钮时更改。我做了一个隐藏的表单,它启动了upvote方法,该方法接受一个请求和一个pk
,并将amount属性增加1。
问题是,当我单击添加按钮时,只有两种产品的数量增加。我无法将产品的剩余数量属性增加。
这是Django模板代码:
<div class="card-deck d-flex justify-content-start container-fluid">
{% for product in products %}
<div class="card lead m-3" style="min-width: 18rem;">
<div class="card-body">
<h5 class="card-title">{{ product.name }}</h5>
<h6 class="card-subtitle mb-2 text-muted">{{ product.product_id }}</h6>
<hr>
<p class="card-text">
Expiration date: {{ product.expiration_date }}
</p>
<p class="card-text">
amount: {{ product.amount }} <a href="javascript:{document.getElementById('upvote').submit();}"><button class="btn btn-primary btn-sm">+</button></a>
</p>
<p class="card-text">
tags:
{% for t in product.tag.all %}
<span class="badge badge-primary">{{ t.name }}</span>
{% endfor %}
</p>
</div>
</div>
<form action="{% url 'upvote' pid=product.id %}" method="POST" id="upvote">
{% csrf_token %}
<input type="hidden">
</form>
这是views.py文件中的upvote方法:
def upvote(request, pid):
if request.method == "POST":
product = get_object_or_404(models.Product, pk=pid)
product.amount += 1
product.save()
return redirect('home')
答案 0 :(得分:1)
您最终会拥有多个不允许使用相同的id
(upvote
)元素,并且Javascript代码始终使用它找到并提交的第一个form
元素。
要具有唯一的表单ID,请更改以下行
<form action="{% url 'upvote' pid=product.id %}" method="POST" id="upvote">
到
<form action="{% url 'upvote' pid=product.id %}" method="POST" id="upvote_{{ product.id }}">
和下一行
<a href="javascript:{document.getElementById('upvote').submit();}">
到
<a href="javascript:{document.getElementById('upvote_{{ product.id }}').submit();}">