按相关字段值分组查询集

时间:2020-07-01 17:51:27

标签: python django django-models django-orm

我有以下模型结构:

make BACDL_DEFINE=-DBACDL_MSTP=1 clean all

我想获得与class Chapter: name = ... class Atom: name = ... chapter = FK(Chapter) class Question: title = ... atom = FK(Atom) 相关的所有Questions,在本章中按Chapter分组。

如何处理我知道的许多查询

Atom

我想可以通过使用atoms = Question.objects.filter(atom__chapter__id=1).values_list("atom", flat=True).distinct() result = {} for atom in atoms: result["atom"] = Question.objects.filter(atom__id=atom) annotate和其他Subquery的员工进行一次查询来完成。这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以在一个查询中获取此信息,但是您需要自己执行grappig:

from itertools import groupby
from operator import attrgetter

questions = Question.objects.filter(
    atom__chapter_id=1
).order_by('atom')

result = {
    k: list(vs)
    for k, vs in groupby(questions, attrgetter('atom_id'))
}

这里result是一个字典,将atom_id对象列表上的Question的主键与该atom_id映射。

相关问题