【问题标题】:Group queryset by related field values按相关字段值分组查询集
【发布时间】:2020-07-01 17:51:27
【问题描述】:

我有以下模型结构:

class Chapter:
    name = ...


class Atom:
    name = ...
    chapter = FK(Chapter)


class Question:
    title = ...
    atom = FK(Atom)

我想获取所有与Chapter 相关的Questions,在本章中按Atoms 分组。

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

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)

我想这可以通过使用annotateSubquery 和其他Django 的员工的一个查询来完成。这可能吗?

【问题讨论】:

    标签: python django django-models django-orm


    【解决方案1】:

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

    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_ids 的主键映射到Question 对象列表与atom_id

    【讨论】:

    • 您输入的参数顺序错误,但非常感谢。 result = {k: list(vs) for k, vs in groupby(questions, attrgetter('atom_id'))}
    猜你喜欢
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多