我有句子模型,其中元数据作为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'}]}]}
元数据是对象列表,并且该对象具有嵌套的对象列表。
我想根据主题 id 查询这些行。在此示例中,元数据列表的行长度为 1,主题列表的长度为 1,因此很容易查询
In [30]: Sentence.objects.filter(id=6753315, metadata__0__themes__0__contains={"id": 35299})
Out[30]: <QuerySet [<Sentence: Sentence object>]>
但是元数据和主题的长度可以是任何东西,所以我如何查询这些行以检查该行中是否存在任何主题 ID 以获取任何长度的元数据和主题。
我只想找出所有具有特定主题 id 的行
Sentence.objects.filter(metadata__*__themes__*__contains={"id": 35299})
我不知道这样写的索引,*
以使我的问题易于理解。