Django:从GET请求生成查询集
发布时间:2020-12-20 11:15:48 所属栏目:Python 来源:网络整理
导读:我使用GET方法设置了Django表单.每个值对应于Django模型的属性.什么是生成查询的最优雅方式?目前这是我在视图中所做的: def search_items(request): if 'search_name' in request.GET: query_attributes = {} query_attributes['color'] = request.GET.get
我使用GET方法设置了Django表单.每个值对应于Django模型的属性.什么是生成查询的最优雅方式?目前这是我在视图中所做的:
def search_items(request): if 'search_name' in request.GET: query_attributes = {} query_attributes['color'] = request.GET.get('color','') if not query_attributes['color']: del query_attributes['color'] query_attributes['shape'] = request.GET.get('shape','') if not query_attributes['shape']: del query_attributes['shape'] items = Items.objects.filter(**query_attributes) 但我很确定有更好的方法可以解决这个问题. 解决方法
您可以使用列表comp和“感兴趣的参数”设置:
def search_items(request): if 'search_name' in request.GET: interested_params = ('color','shape') query_attrs = dict([(param,val) for param,val in request.GET.iteritems() if param in interested_params and val]) items = Items.objects.filter(**query_attrs) 只是为了好玩(也就是说实际上并不这样做)你可以在一行中完成: def search_items(request): items = Items.objects.filter( **dict([(param,val in request.GET.iteritems() if param in ('color','shape') and val]) ) if 'search_name' in request.GET else None (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |