这是我正在研究的 Django 模型的简化版本。
class Course(models.Model):
infos = JSONField()
信息 JSONField 如下所示:
infos = {
category: "Maths",
students: [
{
name: "Alice",
result: 8
},
{
name: "Bob",
result: 12
}
]
}
# (students can have 0 -> n items)
我正在尝试获取在任何课程中至少获得 10 分的所有学生的列表(结果 >= 10)。但是,我无法找到相应地过滤 QuerySet 的方法。
我正在尝试做这样的事情:
(Course.objects.filter(students__result__gte=10)
.values_list('students', flat=True))
但是由于学生是一个列表,我无法直接访问每个项目的结果属性。此外,我认为它不会从结果中排除“Alice”对象。
我想得到这样的结果:
items = [
{
name: "Bob",
result: 12
}
]
如果有办法将过滤的学生和课程类别联系起来,则可以加分:
items = [
{
category: "Maths",
students: [
{
name: "Bob",
result: 12
}
]
}
]
我怎样才能达到预期的效果?