python - 如何在 django 中应用包含字符串和列表值的 dict 中的过滤器?
问题描述
我有 dict - 像这样的过滤器:
"filter1": "string",
"filter2": [
"A","B"
],
"filter3": "string",
"filter4": [
"C","D"
],
}
其中 filter1,filter2,filter3 filter4 是我模型中的一些字段。
这query_set = query_set.filter(**filters)
适用于所有类型不是列表的过滤器,
但我想尽可能干净地过滤 query_set,如何使用包含字符串和列表值的 dict 应用过滤器?
PS:我知道 __in 并且知道我可以做类似的事情
filter2_list = filters.get(filter2)
if filter2_list:
query_set = query_set.filter(filter2__in=filter2_list)
但是,1. 我不想使用 if-else 语句 2. 我想在过滤器参数中有动态变量,而不是像 filter2__in 这样的核心变量
解决方案
好吧,无论如何这都不是一种非常干净的方式,但是您只需遍历过滤器一次,检查它是否是列表即可逃脱。
new_filters = {}
for key,value in f.items():
new_filters[f"{key}__in" if isinstance(value,list) else key] = value
query_set = query_set.filter(**new_filters)
推荐阅读
- javascript - 填充输入框时如何显示 JavaScript 代码
- javascript - 页面刷新时 Javascript 意外显示/隐藏行为
- java - Java Swing 中的空指针异常
- javascript - react-select中的自定义div
- r - 将selectInput标签变成默认显示不能选中的选项
- ios - 如何在我的 ARKit 项目的服务器上存储 3D 模型?
- kotlin - 伴随对象内的参考视图 - Kotlin
- javascript - Ionic-React 接口值为 null
- java - 忽略特定表的多租户
- javascript - 如何在 p5.js 中为围绕球体(冠状病毒)的圆柱体制作嵌套的 for 循环?