【发布时间】:2021-01-29 05:16:21
【问题描述】:
当 Django 的 ORM 使用 CONTAINS 将 JSONB 查询转换为 SQL 时,它使用 ->> 操作符,它工作正常。
例如:
"metadata__my_field_name__icontains": "1234"
运行方式:
...WHERE UPPER(("table"."metadata" ->> my_field_name)::text) LIKE UPPER(%1234%)...
效果很好。
但是,当我尝试使用 IN 运算符和值列表时:
"metadata__my_field_name__in": my_list
生成的 SQL 使用 JSON,而不是像这样的 JSONB 运算符:
..."table"."metadata" -> 'my_id') IN ('1234', '3456', ...
在运行时,它不会返回预期值(空集)。相反,如果我使用 JSONB 运算符 ->> 手动运行相同的查询,则会返回预期值。另请注意,ID 将转换为字符串。我正在运行 Django 2.2。
有没有办法强制 Django 使用 JSONB 运算符?
【问题讨论】:
标签: python django postgresql jsonb