Django模型ID未通过for循环更改

时间:2019-01-07 00:28:48

标签: python django

所以我的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')

1 个答案:

答案 0 :(得分:1)

您最终会拥有多个不允许使用相同的idupvote)元素,并且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();}">