问题:如何在 Django JSONField 中过滤 JSON 数组

我对在 Django 2.0.3 中过滤(postgres)JSONField 感到疯狂。 json 存储为数组。例如。

tasks = [{"task":"test","level":"10"},{"task":"test 123","level":"20"}]

我试过的:

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")

出了什么问题?我想做的是一个icontains - 但正如我已经读过的那样,现在Django中的jsonfields不支持icontains......

解答

正确答案应该是:

myModel.objects.filter(tasks__contains=[{"task":"test"}])

如果需要,您可能希望添加更多过滤器以缩小和加速查询,例如

myModel.objects.filter(Q(tasks_level=10, tasks__contains=[{"task":"test"}]))
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐