将函数属性替换为包含字符串的变量

时间:2019-08-10 18:07:32

标签: python django

我想在单行代码中替换以下if-else代码。 我可以以某种方式直接将过滤器函数中的状态变量用作属性吗?

status = request_queries.get('status', None)
if status == 'saved':
    queryset = queryset.filter(saved = True)
elif status == 'shortlisted':
    queryset = queryset.filter(shortlisted = True)
elif status == 'accepted':
    queryset = queryset.filter(accepted = True) 
elif status == 'rejected':
    queryset = queryset.filter(rejected = True)

2 个答案:

答案 0 :(得分:1)

如果您可以假设status将具有有效的列名(即布尔字段)作为名称,则可以在此处使用 dictionary unpacking

status = request_queries.get('status', None)
queryset = queryset.filter(**{ status: True })

但是,您可能要检查它是否传递了有效的列名,例如:

status = request_queries.get('status', None)
if status in {'saved', 'shortlisted', 'accepted', 'rejected'}:
    queryset = queryset.filter(**{ status: True })

答案 1 :(得分:1)

您可以使用参数构建字典并与**一起使用:

status = request_queries.get('status', None)
kwargs = {status: True}
queryset = queryset.filter(**kwargs)