Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用包含字符串的变量替换函数属性_Python_Django - Fatal编程技术网

Python 用包含字符串的变量替换函数属性

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

我想在一行中编写代码来替换下面的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)
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)