你如何应用来自 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)