You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何获取HTML模板for循环渲染的商品值传递给views.py实现删除功能

Django购物清单删除功能无法获取商品值修复方案

问题根因

你提交的删除表单未携带商品参数,核心问题如下:

  • <td>属于普通展示标签,不属于表单可提交元素,即使设置name属性也不会被POST请求携带
  • 循环生成的DOM元素使用了重复id,违反HTML id全局唯一规范,会导致后续DOM操作异常
  • 删除表单未添加Django POST请求必填的csrf_token,后续提交会触发403权限错误
  • 直接使用商品名称作为删除筛选条件存在重名误删风险,优先使用数据表主键id操作更稳妥

具体修改代码

1. HTML删除表格部分调整

<div>
<table>
{% for item in items %}
<tr>
   <form action="{% url 'shop_delete' %}" method="post">
      {% csrf_token %}
      <!-- 隐藏input传递商品主键id,完全避免重名问题 -->
      <input type="hidden" name="product_id" value="{{ item.id }}">
      <td>{{ item.product }}</td>
      <td><button type="submit" name="delete">X</button></td>
   </form>
</tr>
{% endfor %}
</table>
</div>

2. views.py删除逻辑调整

import datetime
def shop_delete(request):
    if request.method == "POST":
        product_id = request.POST.get("product_id")
        # 按主键+当前用户筛选,保证只删除当前登录用户的对应商品
        Shopping_List.objects.filter(id=product_id, user=request.user).delete()
    return redirect('shop')

如果你坚持要使用商品名称作为删除条件,可将隐藏input的value改为{{ item.product }},name改为product,删除逻辑中补充当日日期筛选即可:

def shop_delete(request):
    if request.method == "POST":
        product = request.POST.get("product")
        Shopping_List.objects.filter(user=request.user, date=datetime.date.today(), product=product).delete()
    return redirect('shop')

内容的提问来源于stack exchange,提问作者Nelso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:01