django - Django - 在 Q 过滤器中使用字符串变量
问题描述
我有一个非常相似的查询,适用于两种不同类型的输入,并且会在正确的列上匹配。除了一个词,即列名之外,这两个查询基本相同。
def trade_company_group(company_group):
# can filter both name or alias as name will always contain 'Companies'
if "COMPANIES" in company_group.upper():
return (
// Same query as below except for "name", below is "alias"
Q(buy_book__entity__company_groups__name__iexact=company_group) &
Q(sell_book__entity__company_groups__name__iexact=company_group) &
(
~Q(buy_book__entity__type=ENTITY.INTERNAL) |
(
Q(buy_book__entity__primary_company_group__name__iexact=company_group) |
Q(sell_book__entity__primary_company_group__name__iexact=company_group)
)
))
return (
Q(buy_book__entity__company_groups__alias__iexact=company_group) &
Q(sell_book__entity__company_groups__alias__iexact=company_group) &
(
~Q(buy_book__entity__type=ENTITY.INTERNAL) |
(
Q(buy_book__entity__primary_company_group__alias__iexact=company_group) |
Q(sell_book__entity__primary_company_group__alias__iexact=company_group)
)
))
我不想重复代码,所以我希望有一种方法可以根据我的 if 语句替换查询中的列名。
这可能吗?
解决方案
您可以改用 dict
.eg 这个:
Q(buy_book__entity__type=ENTITY.INTERNAL)
相当于这个:
q_filter = {"buy_book__entity__type": ENTITY.INTERNAL}
Q(**q_filter)
推荐阅读
- ios - 根据内容以编程方式自动调整 UITableViewCell
- amazon-web-services - 如何使用 Godaddy 的域注册在 AWS EC2 和 ELB 上实施 SSL 证书
- sql - MS-sql 检索年龄最大的学生的成绩数据
- java - 如何使用 ASM 在类文件中查找函数调用的名称?
- r - 子集R中的特殊情况
- vbscript - Installshield LD - 如何在安装 MSI 升级时从不覆盖配置文件
- javascript - 功能与- JavaScript
- fluent - 服务 td-agent 启动失败,亚马逊 linux 上的 GLIBC 冲突
- typescript - 打字稿:具有不同返回类型的重载方法没有错误
- mongodb - mongodb聚合,过滤对象的内部数组