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

如何在Django中动态构建__lte查询条件以避免硬编码?

Django动态字段过滤的解决方案

你当前代码里的type__lte会被Django识别为字面量字段名,而非你传入的type变量对应的字段,所以需要用字典解包的方式传递动态生成的查询条件,修改后的代码如下:

def get_rating_average(self, type):
    # 简化聚合结果的取值逻辑,指定别名后直接通过key获取更直观
    avg_result = super().aggregate(avg=Avg(type))
    return avg_result['avg']

def filter_rating_average_under(self, type):
    # 动态构造查询条件字典,将传入的字段名与查询后缀拼接为key
    filter_condition = {f"{type}__lte": self.get_rating_average(type=type)}
    # 用**解包字典,作为filter的关键字参数传入
    return super().filter(**filter_condition)

关键说明:

  • 动态生成查询条件时,需要把字段名和查询操作符(比如__lte)拼接成字典的键,对应的值为过滤阈值
  • 使用**语法将字典解包为filter()方法的关键字参数,Django就能正确识别动态传入的字段名了
  • 优化了get_rating_average的取值逻辑,避免了转列表取索引的冗余操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:18:38