Запрос внутри списка 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"}])