Python 用包含字符串的变量替换函数属性
我想在一行中编写代码来替换下面的if-else代码。 我是否可以直接使用filter函数中的状态变量作为属性Python 用包含字符串的变量替换函数属性,python,django,Python,Django,我想在一行中编写代码来替换下面的if-else代码。 我是否可以直接使用filter函数中的状态变量作为属性 status = request_queries.get('status', None) if status == 'saved': queryset = queryset.filter(saved = True) elif status == 'shortlisted': queryset = queryset.filter(shortlisted = True) el
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)
如果您可以假定
状态
将有一个有效的列名(即布尔字段)作为名称,则可以在此处使用字典解包:
status=request\u querys.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 })
status=request\u querys.get('status',None)
如果状态为{'saved','shortlist','accepted','rejected'}:
queryset=queryset.filter(**{status:True})
您可以使用参数构建一个dict,并与**
一起使用:
status = request_queries.get('status', None)
kwargs = {status: True}
queryset = queryset.filter(**kwargs)
获取以下错误:“filter()关键字必须是字符串”@user11879807:这是因为如果
请求\u查询中缺少状态
。get('status',None)
,它将返回无
,因此会出错。这就是为什么你应该通过会员资格检查来保护这一点的原因之一。
status = request_queries.get('status', None)
kwargs = {status: True}
queryset = queryset.filter(**kwargs)