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

Django使用字典推导式过滤模型时触发exact lookup错误如何解决

问题根源

你调用Card.objects.filter(device=device)时传入的device参数本身是一个未执行的多结果QuerySet对象,而Django的精确匹配=查询要求右值为单个值(模型实例、主键、基础类型值),直接传入多结果QuerySet就会触发该报错。
错误和你后续的字典推导式、字典值为列表的写法完全无关,你排查时发现遍历cards就报错也印证了问题出在查询语句本身。

排查步骤
  • 打印device变量的类型和值确认问题:print(type(device), device),如果输出类型为django.db.models.query.QuerySet即可定位问题
  • 回溯device变量的赋值逻辑,大概率是你之前用了filter查询赋值但没有取单个结果
修复方案

分两种使用场景选择修复方式:

  1. 你预期只查询单个设备关联的Card
    给device变量赋值时取单个结果即可:
# 原错误赋值写法示例
device = Device.objects.filter(设备标识="xxx")
# 修改为取第一个匹配结果
device = Device.objects.filter(设备标识="xxx").first()
# 若确定匹配结果唯一,也可以用get查询
device = Device.objects.get(设备标识="xxx")

修改后再执行Card.objects.filter(device=device)即可正常返回QuerySet,后续遍历和字典推导式都可以正常运行。
2. 你预期查询多个设备关联的Card
将查询条件改为__in查询即可匹配QuerySet内的所有设备:

cards = Card.objects.filter(device__in=device)

内容的提问来源于stack exchange,提问作者Zaid Al Shattle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:39:03