Django:快速检索manyToMany字段的ID

Noa*_*ore 10 python database django postgresql m2m

我在Django中使用以下模型模式(使用Postgres).

class A(Models.model):
    related = models.ManyToManyField("self", null=True)
Run Code Online (Sandbox Code Playgroud)

给定A的QuerySet,我想返回一个字典A,将QuerySet中的每个实例尽可能快地映射到idrelated实例的列表.

我可以肯定地遍历每个A并查询相关字段,但是有更优化的方法吗?

Lua*_*eca 12

据你有三个例子.您可以使用该values_list方法仅检索结果,并从此结果中获取其related实例的ID .我使用该pk字段作为我的过滤器,因为我不知道你的方案,但你可以使用任何东西,只是必须是一个QuerySet.

>>> result = A.objects.filter(pk=1)
>>> result.values('related__id')
[{'id': 2}, {'id': 3}]
>>> result.values_list('related__id')
[(2,), (3,)]
>>> result.values_list('related__id', flat=True)
[2, 3]
Run Code Online (Sandbox Code Playgroud)

  • 这就是我一直在做的事情,但问题是我需要过滤多个“pk”(例如“A.objects.filter(pk__in=[1,2,6])”)。我想要一个列表列表,其中第 n 个内部列表类似于此处的“values_list”,但对应于第 n 个“pk”。 (3认同)
  • 这些天“result.values_list”似乎返回一个查询集。可以使用“list(result.values_list)”轻松将其转换回列表 (2认同)