python - Django模型ID没有通过for循环改变
问题描述
所以我的 Django 模板中有一个 for 循环,它遍历我的产品模型中的产品。产品模型有一个amount
属性,当用户单击“添加”按钮时该属性会发生变化。我制作了一个隐藏表单来启动 upvote 方法,该方法接受一个请求和 apk
并将金额属性增加 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')
解决方案
您最终会拥有多个具有相同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();}">
推荐阅读
- android - 我的 Android TV 应用仅适用于 Android TV 模拟器 (Android Studio)
- c# - 在特定时间更改 Firebase 中的值
- c# - 抛出 Objective-C 异常。名称:NSInvalidArgumentException 原因:在捆绑包 NSBundle 中找不到名为“visit_info”的故事板
- pdf - 将文件作为 OLE 添加到 Libreoffice-writer 并将 Writer 转换为 PDF
- sql - 从单元格读取变量时,VBA ADODB SQL 查询返回“自动化错误”,在 VBA 代码中分配值时效果很好
- python - 如何将包含列表列表的 Python 文本文件转换为列表列表?
- angular - Angular ngrx - 使用对象内的数组更新存储
- c++ - constexpr 检查两个层次相关类型之间指针的 static_cast 是否更改指针值
- json - 无法输出从 API 获取的数据
- reactjs - React Native ScrollView 包装复杂元素