我有字典-像这样的过滤器:
"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
这样的核心变量嗯,无论如何这都不是一种很干净的方法,但是您可以通过遍历过滤器一次,检查它是否为列表来逃脱。
for key,value in f.items():
if isinstance(value,list):
new_filters[f"{key}__in"] = value
else:
new_filters[key] = value
query_set = query_set.filter(**new_filters)