你如何应用来自 django 中包含字符串和列表值的字典的过滤器?
How do you apply the filters from a dict which contains both string and list values in django?
我有 dict - 像这样的过滤器:
"filter1": "string",
"filter2": [
"A","B"
],
"filter3": "string",
"filter4": [
"C","D"
],
}
其中 filter1、filter2、filter3 filter4 是我模型中的一些字段。
这 query_set = query_set.filter(**filters)
适用于所有类型不是列表的过滤器,
但我想尽可能干净地过滤 query_set,
如何使用包含字符串和列表值的字典应用过滤器?
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)
我有 dict - 像这样的过滤器:
"filter1": "string",
"filter2": [
"A","B"
],
"filter3": "string",
"filter4": [
"C","D"
],
}
其中 filter1、filter2、filter3 filter4 是我模型中的一些字段。
这 query_set = query_set.filter(**filters)
适用于所有类型不是列表的过滤器,
但我想尽可能干净地过滤 query_set, 如何使用包含字符串和列表值的字典应用过滤器?
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)