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

Django调用objects.get报‘Devices匹配查询不存在’问题求助

问题诊断与修复方案

我帮你排查出几个关键问题,正是它们导致了这个"Devices matching query does not exist."错误:

1. URL参数传递不匹配

你的视图函数view_status定义了pk作为路径参数,但你调用时用的是查询参数(?pk=1),这会导致视图里的pk参数始终是None。当你执行Devices.objects.get(pk=pk)时,实际上是在找pk=None的设备,自然会提示不存在。

修复方案二选一:

方案A:改用路径参数传递pk

修改urls.py的URL配置,把pk放到路径里:

url(r'^viewstatus/(?P<pk>\d+)/$', views.view_status, name='ViewStatus'),

调用URL改为:http://localhost:8000/homesite/viewstatus/1/

方案B:从GET查询参数中获取pk

如果坚持用查询参数,修改视图函数,从request.GET里取pk值:

from django.http import Http404

def view_status(request):
    pk = request.GET.get('pk')
    if not pk:
        raise Http404("PK参数缺失")
    device = Devices.objects.get(pk=pk)
    return render(request, 'homesite/device_status.html', {'devices': device})

2. 视图返回上下文的格式错误

你当前的render调用直接传了device对象作为上下文,但render要求第三个参数是字典类型。而且模板里用的是devices作为变量名,所以需要把对象包装成键为devices的字典。

修改后的render语句应该是:

return render(request, 'homesite/device_status.html', {'devices': device})

额外的最佳实践建议

  • 模型类名建议用单数形式(比如Device而不是Devices),这是Django的惯例,能避免后续一些混淆。
  • 建议用get_object_or_404替代直接get,这样当对象不存在时会返回更友好的404页面,而不是抛出服务器错误:
from django.shortcuts import get_object_or_404

# 用路径参数的情况
device = get_object_or_404(Devices, pk=pk)

按照上面的步骤修改后,应该就能正常获取到设备对象并在模板中展示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:31:01