こういうモデルがあって
models.py
class Test(models.Model):
text = CharField(max_length=255 blank=True, null=True)
fields = JSONField(blank=True, null=True)
JSONの中身はこのような場合の話
[
{
"name": "sample1",
"value": "value1"
},
{
"name": "sample2",
"value": True
},
{
"name": "sample3",
"value": "value3",
"url": "https://hogehoge.com"
]
例えば、fieldのJSONで"name": "sample2"で"value"がTrueのものをとりたいなー、という場合はこんな感じでフィルターかけたらうまくいった
query = Test.Objects.filter(fields__contains=[{'name': 'sample2', 'value': True}])
JSONが以下のようにネストしている場合
[
{
"name": "sample1",
"value": {
"foo1": "bar1",
"foo2": "bar2",
}
},
{
"name": "sample2",
"value": {
"foo1": "bar1",
"foo4": "bar4",
}
}
]
"name"が"sample2"で"value"の中の"foo4"が"bar4"のものだけを取りたいなー、というときは以下のようにフィルターかける
query = Test.Objects.filter(fields__contains=[{'name': 'sample2', 'value': {'foo4': 'bar4'}}])
"value"の中の"foo1"が"bar1"だけを取りたい場合は
query = Test.Objects.filter(fields__contains=[{'value': {'foo1': 'bar1'}}])
割とそのまんまだな、と書いてて思った