加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读