У меня есть модель предложения, метаданные которой 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})
Я не знаю индекса, поэтому написал *
, чтобы облегчить понимание моей проблемы.