您如何应用包含django中字符串和列表值的字典的过滤器?

问题描述 投票:1回答:1

我有字典-像这样的过滤器:

    "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

这样的核心变量
python django search filter django-queryset
1个回答
0
投票

嗯,无论如何这都不是一种很干净的方法,但是您可以通过遍历过滤器一次,检查它是否为列表来逃脱。

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)
© www.soinside.com 2019 - 2024. All rights reserved.