Запрос django JSONField для вложенного значения в списке вложенных объектов - PullRequest
0 голосов
/ 06 июля 2018

У меня есть модель предложения, метаданные которой JSONField
Один пример строки

Sentence.objects.filter(id=6753315).values('id', 'metadata')[0]

{'id': 6753315,
 'metadata': [{'filters': [{'id': None, 'level_name': 'Brand Hierarchy'},
                           {'id': None, 'level_name': 'Category Hierarchy'}],
               'product': None,
               'themes': [{'id': 35299, 'sentiment': 'Positive'},
                          {'id': 35301, 'sentiment': 'Positive'}]}]}

метаданные - это список объектов, и у этого объекта есть вложенный список объектов.
Я хочу запросить такие строки на основе идентификатора темы. В этом примере длина строки списка метаданных равна 1, а длина списка тем равна 1, поэтому ее легко запрашивать, например,

In [30]: Sentence.objects.filter(id=6753315, metadata__0__themes__0__contains={"id": 35299})
Out[30]: <QuerySet [<Sentence: Sentence object>]>

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

Я просто хочу выяснить все строки, которые имеют определенный идентификатор темы

Sentence.objects.filter(metadata__*__themes__*__contains={"id": 35299})  

Я не знаю индекса, поэтому написал *, чтобы облегчить понимание моей проблемы.

...