使用字典理解过滤 django 模型

Filter django model using Dictionary Comprehension

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

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

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

The QuerySet value for an exact lookup must be limited to one result using slicing.

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

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

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

for card in cards:

给出了同样的错误,错误似乎在行中:

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

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

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

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)

解决了我的问题。