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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:05:23