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

Peewee ORM多模型关联查询时如何基于关联模型字段过滤?

解决Peewee跨关联模型过滤的问题

直接用where()方法替代filter()即可实现跨关联模型的字段过滤——filter()是绑定到主查询模型(这里是Model1)的快捷方法,仅支持解析主模型字段;而where()是通用条件添加方式,支持任意参与查询的模型字段:

# 同时过滤两个模型字段的正确写法
query = Model1.select(Model1, Model2).join(Model2).where(
    Model1.name == 'foo',
    Model2.id == 22
).dicts()

如果偏好使用filter(),可以通过Model1的外键字段反向关联Model2的条件(假设Model1的外键字段为model2_id):

# 借助外键反向引用实现Model2字段过滤
query = Model1.select(Model1, Model2).join(Model2).filter(
    Model1.name == 'foo',
    Model1.model2_id == 22  # 逻辑等价于Model2.id == 22
).dicts()

要是需要动态构建过滤条件(比如从字典生成),可以把所有条件存入列表后解包传给where():

filters = [
    Model1.name == 'foo',
    Model2.id == 22
]
query = Model1.select(Model1, Model2).join(Model2).where(*filters).dicts()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:05:26