Django从模态框获取数据时出现<built-in function id>错误求助
问题分析与修复方案
核心错误点
1. 视图函数变量名误用
在cancel_request视图中,你已经通过_id = request.POST.get("object_id")获取了对象ID,但查询时错误使用了id=id——这里的id是Python内置函数,并非你获取的对象ID,导致Django试图将内置函数作为ID值查询,触发类型错误。
2. HTML隐藏input属性冲突
你的隐藏input存在重复name属性:
<input type="hidden" name="object_id" name="object_field" />
浏览器只会保留最后一个name值(即object_field),导致视图无法通过request.POST.get("object_id")获取到正确值。
3. jQuery设置input值的方式错误
你使用$('#object_id').html(...)设置值,但:
- 原input未设置
id="object_id",选择器无法定位元素 - input元素需设置
value属性,而非html()方法
修复后的代码
1. 修正HTML部分
给隐藏input添加id,并保留正确的name属性:
{% for a in objects %} [...] <td><button type="button" class="delete-button" data-name="{{ a.id }}" data-bs-toggle="modal" data-bs-target="#deleteModal">Delete</button></td> [...] {% endfor %} [...] <div class="modal fade" id="deleteModal"> [...] <form action="{% url 'delete_object' %}" method="post"> {% csrf_token %} <input type="hidden" id="object_id" name="object_id" /> <button type="submit">Delete</button> [...]
2. 修正jQuery代码
改为设置input的value属性,使用正确的ID选择器:
$('.delete-button').click(function() { $('#object_id').val($(this).data('name')) })
3. 修正视图函数
将查询参数改为获取到的_id,同时增加异常处理避免报错:
def cancel_request(request): _id = request.POST.get("object_id") if not _id: return redirect("home") try: obj = Object.objects.get(id=_id) obj.status = "Annulé" obj.save() except Object.DoesNotExist: pass return redirect("home")
额外建议
- 可以考虑将ID直接嵌入URL(如
{% url 'delete_object' a.id %}),或使用Django基于类的视图,更符合框架最佳实践,同时避免前端传递ID的问题。 - 提交模态框时可增加加载状态提示,防止用户重复点击。
内容的提问来源于stack exchange,提问作者Kaiss B.
相关产品推荐
相关产品推荐

