django - 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=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
通过调用检索相关的 s .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
}
推荐阅读
- ios - 如何访问我的应用程序的派生数据文件夹本身?
- r - 在 R 中排除具有模式匹配的行
- angular - 您如何在 ag-grid 模块中使用多个组件?
- c - 另一个 ListView 中的 ListView 没有组装正确的模板
- python - 没有弃用警告的 unicode_escape
- javascript - Chart.js - 如何更新数据
- python - Python:如何制作非阻塞while循环?
- instagram-api - 带有故事存档失败响应的 Instagram 私人 api 列表卷轴媒体查看器
- c++ - 将句子传递给c ++中的char数组
- python - 有没有办法自动创建新实例?