How to filter JSON Array in Django JSONField
·
Answer a question
i am getting crazy with filtering a (postgres) JSONField in Django 2.0.3. The json is stored as an array. E.g.
tasks = [{"task":"test","level":"10"},{"task":"test 123","level":"20"}]
What i've tried:
myModel.objects.filter("tasks__task__contains"="test")
myModel.objects.filter("tasks_task__0__contains"="test")
myModel.objects.filter("tasks__0__task__contains"="test")
myModel.objects.filter("tasks_task__0_x__contains"="test")
myModel.objects.filter("tasks__0_x__task__contains"="test")
What goes wrong? What i want to do is a icontains - but as i already read there is not support for icontains on jsonfields in Django right now...
Answers
The right answer should be:
myModel.objects.filter(tasks__contains=[{"task":"test"}])
You may want to add more filters to narrow down and speed up the query if needed, something like
myModel.objects.filter(Q(tasks_level=10, tasks__contains=[{"task":"test"}]))
更多推荐
所有评论(0)