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

如何将字典参数解包传入Django ORM的filter方法筛选模型数据

正确实现方式

你之前的代码存在两个核心问题:

  1. Django ORM的筛选方法拼写错误,正确方法名是filter()而非filters()
  2. 字典需要用**解包运算符转换为关键字参数后,才能传入filter()方法

实现方案1:接收字典参数

适合筛选条件已经提前封装为字典的场景:

def find_player(filter_params: dict):
    # 用**解包字典后传入filter方法
    players = Player.objects.filter(**filter_params).all()
    for player in players:
        # 你的业务逻辑
        print(player.name)

调用示例:

# 注意字典的键必须是字符串,和模型字段名完全对应
find_player({"defender": True, "goalkeeper": True})
find_player({"defender": True, "attacker": False})
find_player({"defender": False})

实现方案2:直接接收关键字参数(更简洁)

适合调用时手动传筛选条件的场景,不需要额外封装字典:

def find_player(**kwargs):
    players = Player.objects.filter(**kwargs).all()
    for player in players:
        print(player.name)

# 调用时直接传筛选条件即可
find_player(defender=True, goalkeeper=True)
find_player(defender=True, attacker=False)
find_player(defender=False)

注意事项

  • 字典的键必须与模型字段名完全匹配,拼写错误会触发字段不存在的异常
  • 支持Django原生的双下划线查询语法,比如传入{"name__icontains": "Ronaldo"}即可实现名字的模糊匹配
  • 不要使用exec()实现该需求,该写法存在极高的SQL注入风险,且完全不符合Django的设计规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:39:00