django python优化过滤器查询
我有几个参数: 年龄、身高、体重等等 我需要通过这个参数进行搜索。 现在我可以这样做:django python优化过滤器查询,python,django,python-3.x,Python,Django,Python 3.x,我有几个参数: 年龄、身高、体重等等 我需要通过这个参数进行搜索。 现在我可以这样做: persons.vip = Person.get_vip() params.search.age = request.GET.get('age') if params.search.age: range = params.search.age persons.vip = persons.vip.filter(age__gte=range) else:
persons.vip = Person.get_vip()
params.search.age = request.GET.get('age')
if params.search.age:
range = params.search.age
persons.vip = persons.vip.filter(age__gte=range)
else:
do somethin
params.search.weight= request.GET.get('weight')
if params.search.weight:
range = params.search.weight
persons.vip = persons.vip.filter(age__gte=range)
else:
do somethin
对于其他参数,如高度等,使用相同的代码块
如何优化此代码并消除代码重复?这取决于
块执行的操作
如果我们假设它是空的,你可以有一个简单的地图,如:
param_filters_map = {
'weight': 'age__gte',
'height': 'weight__gte',
...}
然后对其进行迭代:
for request_param_name, filter_name in param_filters_map.items():
request_param = request.GET.get(request_param_name):
if request_param:
persons.vip = persons.vip.filter(**{filter_name: request_param})
如果它不是空的,我会尝试思考是否有可能在参数循环之前的那些块中应用逻辑(如果有一些默认行为,我们应该用请求参数覆盖)