Django ORM查询多个关键字并使用单个查询重新运行多个对象列表

Django ORM查询多个关键字并使用单个查询重新运行多个对象列表,django,django-models,django-orm,Django,Django Models,Django Orm,这些是我的模型: class Topic(models.Model): name = models.CharField( max_length=50 ) class Question(models.Model): title = models.CharField( max_length=100 ) topic = models.ForeignKey( Topic, on_delete=mo

这些是我的模型:

class Topic(models.Model):
    name = models.CharField(
        max_length=50
    )


class Question(models.Model):
    title = models.CharField(
        max_length=100
    )
    topic = models.ForeignKey(
        Topic,
        on_delete=models.CASCADE
    )
例如,我有许多关于
主题
的问题,我试图查询
英语
生物学
主题相关问题

这是我当前的问题:

question = Question.objects.filter(
        topic__name__in=["english", "biology"]
    ).values('title', 'id', 'topic')
它返回所有
生物学
英语
相关问题

我不想完全像这样

我想,它将返回所有问题,即
英语
生物学
相关问题,但应与组一起,例如,所有与英语相关的对象应在一个单独的列表中,所有与生物学相关的对象应在另一个单独的列表中

可以有许多主题,所有查询都应该在一个列表中重新运行,并且在该列表中,应该有基于主题的多个对象列表

输出如下所示:

[
    {
        'english': [here will be all the biology related objecs in list],
        'biology': [here will be all the biology related objects in list]
    }
]
我希望你有问题


在这种情况下,有人能帮我吗?

我建议换一种方式:我们先筛选主题,然后用
检索相关的
问题。预回迁相关(…)
呼叫:

qs = Topic.objects.filter(
    name__in=['english', 'biology']
).prefetch_related('question')
然后,我们可以使用以下内容构建词典:

result = {
    t.name: [{'id': q.id, 'title': q.title} for q in t.question_set.all()]
    for t in qs
}

谢谢,你让我开心