Alo*_*hor 5 django postgresql django-jsonfield
我有一个句子模型,其元数据为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'}]}]}
Run Code Online (Sandbox Code Playgroud)
元数据是对象列表,该对象具有嵌套的对象列表。
我想根据主题 id 查询这些行。在此示例中,元数据列表的行长度为 1,主题列表的长度为 1,因此很容易查询,例如
In [30]: Sentence.objects.filter(id=6753315, metadata__0__themes__0__contains={"id": 35299})
Out[30]: <QuerySet [<Sentence: Sentence object>]>
Run Code Online (Sandbox Code Playgroud)
但是元数据和主题的长度可以是任何长度,所以我如何查询这些行来检查该行中是否存在某个主题 id,或者不存在任何长度的元数据和主题。
我只想找出具有特定主题 id 的所有行
Sentence.objects.filter(metadata__*__themes__*__contains={"id": 35299})
Run Code Online (Sandbox Code Playgroud)
我不知道这样写的索引*是为了让我的问题易于理解。
哇,我明白了
Sentence.objects.filter(metadata__contains=[{'themes': [{"id": 35299}]}])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |