You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中以字典形式构建Q对象实现或条件查询?

Django中用字典构建Q查询实现OR筛选

你遇到的问题核心是:直接用字典传给filter(**filter_dict)时,Django会把字典里的多个条件当成**AND(且)关系,而你需要的是OR(或)**关系——只要满足两个关联字段中的任意一个在物业主键列表里就行。

要实现这个需求,你可以用字典来初始化Q对象,再通过|运算符组合出OR逻辑,具体代码如下:

# 先把字符串类型的主键转成整数(Django主键通常是整数类型,避免类型不匹配)
properties = [int(pk) for pk in ['6', '21', '8', '13', '7', '11', '10', '15', '22']]

# 用字典解包的方式构建两个Q对象
q_accounts = Q(**{'accounts_payable_line_item__property__pk__in': properties})
q_journal = Q(**{'journal_line_item__property__pk__in': properties})

# 用|组合两个Q对象,实现OR逻辑筛选
queryset = queryset.select_related(
    'accounts_payable_line_item', 
    'journal_line_item'
).filter(q_accounts | q_journal).order_by('-id')

关键说明:

  • Q(**字典)语法可以把字典的键值对转成Q对象的参数,完美契合你想用字典形式构建查询的需求。
  • |运算符是Q对象的OR逻辑,&则是AND逻辑,按需组合即可。
  • 把字符串主键转成整数是为了匹配Django模型中主键的字段类型,避免因类型不一致导致的筛选错误。

内容的提问来源于stack exchange,提问作者ViaTech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:12:40