Вот упрощенная версия модели 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))
Но так как студенты - это список, я не могу напрямую получить доступ к свойству результата каждого элемента. Кроме того, я не думаю, что это исключит объект «Алиса» из результатов.
Я бы хотел получить такие результаты:
items = [
{
name: "Bob",
result: 12
}
]
Бонусные баллы, если есть возможность связать отфильтрованных студентов и категорию курса:
items = [
{
category: "Maths",
students: [
{
name: "Bob",
result: 12
}
]
}
]
Как мне достичь желаемого результата?