【问题标题】:Filter django model using Dictionary Comprehension使用字典理解过滤 django 模型
【发布时间】:2021-11-24 21:54:34
【问题描述】:

我有一个模型,称为卡片,其中包含许多我想要循环的元素。所以我试图使用一些字典理解如下:

cards = Card.objects.filter(device=device)
output = { c.id : [c.generateData(), c.sensor.getLatestTime()] for c in cards}

在运行该代码时,它在输出语句上中断并出现以下错误:

精确查找的 QuerySet 值必须限制为一个结果 使用切片。

我为该确切错误找到的大多数预先存在的答案都是针对查询集与单个字段混淆的情况,例如12。但是在我的情况下,我期待并通过循环将其作为查询集处理。

我还在here 中看到了一个关于在模型上使用字典理解的类似问题,但是据我所知,我的格式几乎相同(除非作为第二个参数的列表导致问题不知何故?)

编辑:我在尝试测试错误发生的位置时注意到,即使是简单的 for 循环,例如:

for card in cards:

给出了同样的错误,错误似乎在某种程度上:

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

老实说,这对我来说没有多大意义。感觉好像我忘记了一些基本的东西,但我还看不到它。

【问题讨论】:

  • 您显示的代码没有问题。完整的回溯以及设备的 Card 类定义以及您如何获取传递给过滤器的设备值将非常有帮助...
  • 在发送问题前进行了一个小时的故障排除后,在发布问题 30 分钟后,我想通了。不过感谢您的帮助。毕竟最烦人的问题似乎总是最简单的......

标签: python django django-models dictionary-comprehension


【解决方案1】:

发现错误很愚蠢,在声明中:

output = { c.id : [c.generateData(), c.sensor.getLatestTime()] for c in cards}

错误发生在这里,导致我认为问题发生在:

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

由于代码打破了该部分,但是,进一步研究它,因为将这个语句替换为:

cards = Card.objects.all()

解决了这个问题,我发现错误发生在过滤器参数上,因为我之前做了以下几行:

device = Device.objects.filter(project__user=user,id=id)

因此,尝试在第二个条件中使用查询集。因此将其替换为:

device = Device.objects.get(project__user=user,id=id)

解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2018-07-28
    • 1970-01-01
    • 2018-12-22
    • 2014-09-19
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多