这些是我的模特:
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
)
例如,我对来自许多主题的topic
有很多疑问,我正在尝试查询与主题相关的english
,biology
问题。
这是我当前的查询:
question = Question.objects.filter(
topic__name__in=["english", "biology"]
).values('title', 'id', 'topic')
它返回所有与biology
和english
相关的问题。
我不想要这样。
[我想要,它将返回所有与english
和biology
相关的问题,但应与小组同在的问题,例如,所有与英语相关的对象应在单独的列表中,而所有与生物学相关的对象应在另一个列表中单独的列表。
可能有很多主题,所有查询应在一个列表中重新运行,并且在该列表中,应基于该主题有多个对象列表。
输出看起来像这样:
[
{
'english': [here will be all the biology related objecs in list],
'biology': [here will be all the biology related objects in list]
}
]
希望您有问题。
在这种情况下有人可以帮助我吗?
我建议采取另一种方法:我们首先对主题进行过滤,然后通过Question
调用检索相关的.prefetch_related(..)
:
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
}