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
相关产品推荐
相关产品推荐

