我想在单行代码中替换以下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)
答案 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)