Фильтровать элементы списка в Django JSONField - PullRequest
0 голосов
/ 21 мая 2019

Вот упрощенная версия модели 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
            }
        ]
    }
 ]

Как мне достичь желаемого результата?

...