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
}
谢谢,你让我开心