我想构建复杂的过滤器:
queryset.filter(
(Q(k__contains=“1”) & Q(k__contains=“2”) & (~Q(k__contains=“3”))) |
(Q(k1__contains=“2”) & (~Q(k4__contains=“3”)))
)
结构是固定的,但查询情况是动态的(来自给定的输入),例如输入可以是
(k=1&k=2&~k=3) | (k1=1&~k4=3)
或
(k=1&~k=3) | (k1=1&~k4=3) | (k=4&~k=3)
如何添加括号以构建此查询以使其按预期运行?
最后我无法使用django Q进行这项工作。
错误使用extra
构建类似代码的代码>>
queryset.extra(where =
["(k1 like '%1%' and k2 like '%2%' and (k3 not like '%3%')) or (k1 like '%4%' and (k3 not like '%3%'))"]
)
而且有效。😂