python - 如何在 Django 查询中混合 AND 和 OR 运算符?

标签 python django django-views

我是 Django 初学者,我弄清楚了如何动态创建模型查询,但当我尝试混合 ANDOR 时,我陷入了困境运算符:

我有一个字段列表(联系人姓名、公司、职位、国家/地区),这些字段可能包含多个关键字(以逗号“,”分隔)

因此,如果我搜索这些公司名称“imtech、ABC、FooBar”,我会使用下面的代码得到正确的结果,因为它始终使用 | (OR) 运算符。

但是,如果我想限制搜索公司字段为“imtech、ABC、FooBar”且职位字段仅为“客户经理”的条目,该怎么办?

我知道我必须将 & 运算符放在每个字段循环的末尾,但我没有成功这样做,所以这是我的代码,请帮助我!!!

search_fields = {'contact_name', 'company', 'position', 'country'}
search_fields_values = {}
qs_params = None

for field in search_fields:
    search_fields_values[field] = self.request.GET.get(field, None)
    if search_fields_values[field]:
        search_fields_values[field] = search_fields_values[field].split(',')

        for part in search_fields_values[field]:
            q = Q(**{field: part})
            qs_params = qs_params | q if qs_params else q

qs = qs.filter(qs_params)

感谢一百万!

最佳答案

我希望我正确理解了你的问题。

这是理论上应该有效的(但尚未测试过):

import operator

...

search_fields = {'contact_name', 'company', 'position', 'country'}

conditions = []
for name in search_fields:
    value = self.request.GET.get(name, None)
    if value:
        conditions.append(Q(**{name + "__in": value.split(',')}))

qs = qs.filter(reduce(operator.and_, conditions))

所以,我想到了两个想法:

  • 使用__in代替多个OR
  • 收集每个搜索字段的这些in查询,然后使用 AND 将它们连接起来

希望有帮助。

关于python - 如何在 Django 查询中混合 AND 和 OR 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403852/

相关文章:

python - 试图找到前 5 个最常见的条目

Django Python 将文件上传到特定文件夹

Django 测试 : determine which view was executed

python - 如果与另一个数据帧的 ID 匹配,则添加 n 个数据帧中的值

python - 在 linux 中使用 python 更改日期/时间

python - 根据列名和值的条件对数据框进行切片

python - Django Rest Framework 中的嵌套序列化程序 "Through model"

python - 如何检查 Python unicode 字符串是否包含非西方字母?

python - python环境中不规则网格上的曲面图

python - 缓冲区 dtype 不匹配,预期为 'SIZE_t' 但得到 'long long'