减少elif块的数量

Zor*_*rig 5 python django query-optimization django-rest-framework

我正在尝试根据以下内容进行过滤queryparams.

如何减少代码行:

if fridge == 'true' and toilet == 'true' and side_window == 'true':
    queryset = queryset.filter(toilet=True, fridge=True, sun_side_window=True)
elif fridge == 'true' and toilet == 'true':
    queryset = queryset.filter(toilet=True, fridge=True)
elif fridge == 'true' and side_window == 'true':
    queryset = queryset.filter(sun_side_window=side_window.capitalize(), fridge=fridge.capitalize())
elif toilet == 'true' and side_window == 'true':
    queryset = queryset.filter(sun_side_window=side_window.capitalize(), toilet=toilet.capitalize())
elif fridge == 'true':
    queryset = queryset.filter(fridge=fridge.capitalize())
elif toilet == 'true':
    queryset = queryset.filter(toilet=toilet.capitalize())
elif side_window == 'true':
    queryset = queryset.filter(sun_side_window=True)
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 0

创建一个像这样的函数怎么样

def q(**kwargs):

    for k in kwargs:
        if kwargs[k] == 'true':
            kwargs[k] = True

    return queryset.filter(**kwargs)
Run Code Online (Sandbox Code Playgroud)

您只需要以某种方式映射sun_side_windowside_window删除它。