Запрос внутри списка dicts в модели Django JSONField

Я пытаюсь запросить элемент в списке dicts в Django JSONField. Я могу найти вопросы, похожие на мой, но не один, который охватывает то, что я пытаюсь сделать. Кажется, что это должно быть просто и довольно распространено, поэтому я подозреваю, что упускаю что-то простое.

Итак, чтобы немного расширить пример из документации Django docs

Допустим, у меня есть модель Dog с полем JSONField с именем data и в нем есть некоторые данные, такие как:

Dog.objects.create(name='Rufus',
    data = {"other_pets":
            [{"name", "Fishy"},
             {"name": "Rover"},
             {"name": "Dave"}]}
)

Имеется ключ с именем "other_pets", который представляет собой список диктов. Я хотел бы написать запрос, который возвращает любые модели, включающие дикту с ключом name=="Dave"

Я могу сделать это напрямую, если ссылаюсь на элемент по индексу, например:

Dog.objects.filter(data__other_pets__2="Dave")

Вернет мне строку, но мне нужно ссылаться на индекс элемента списка, а как позиция элемента, который я ищу, так и размер списка различаются в разных моделях.

Я подумал, что, возможно,

Dog.objects.filter(data__other_pets__contains={"name":"Dave"})

Работает, но не возвращает никаких элементов.

Возможно ли то, что я пытаюсь сделать? Как вариант, возможно ли добавить индекс для подобных запросов?

Спасибо!

Поскольку other_pets является списком, вы должны передать список в фильтр contains

Dog.objects.filter(data__other_pets__contains=[{"name":"Dave"}])
Вернуться на верх