Django查询时如何动态拼接lookup字段后缀实现QuerySet条件筛选
直接通过字典解包的方式传入动态构造的查询参数即可实现需求,优化后的代码如下:
field_lookup = { '>=': '__gte', '<=': '__lte', '=': '__exact' } # 仅在输入有效时执行查询 if len(statinput) > 0 and statsign in field_lookup: # 构造查询参数字典 lookup_field = f"nba_avg_rating{field_lookup[statsign]}" query_kwargs = {lookup_field: float(statinput)} # 解包字典传入filter方法 players = players.filter(**query_kwargs).order_by(sort)
实现说明
- Django ORM的
filter方法支持接收解包后的字典作为关键字参数,字典的键对应查询字段+lookup后缀,值对应筛选条件,完全等价于硬编码的查询写法 - 无需遍历映射字典,直接用
statsign作为键取值即可,性能更高 - 新增了
statsign in field_lookup的合法性校验,避免传入未定义的比较符号导致报错 - 你之前测试代码里的
orderby为笔误,正确写法为order_by,上述代码已修正
内容的提问来源于stack exchange,提问作者nick_rinaldi
相关产品推荐
相关产品推荐

