代码之家  ›  专栏  ›  技术社区  ›  juju

如何使用django.db.models q模块查询多行用户输入文本数据

  •  1
  • juju  · 技术社区  · 6 年前

    <textarea> HTML输入字段?我可以用普通的HTML查询单个对象。 <input>

      def search_list(request):
        template = 'search_result.html'
        query = request.GET.get('q').split('\n')
        for each in query:
            if each:
                results = Product.objects.filter(Q(name__icontains=each))
    

      def search(request):
        template = 'search_result.html'
        query = request.GET.get('q')
        if query:
            results = Product.objects.filter(Q(name__icontains=query))
    

    我基本上只想搜索我的数据库,查找输入到列表中的数据用户列表,然后用一个查询返回所有这些结果。非常感谢你的帮助。谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   willeM_ Van Onsem    6 年前

    q 字符串。

    Q reduce -列出 Q(name__icontains=...) |

    from django.db.models import Q
    from functools import reduce
    from operator import or_
    
    def search_list(request):
        template = 'search_result.html'
        results = Product.objects.all()
        error = None
        query = request.GET.get('q')
        if query:
            query = query.split('\n')
        else:
            error = 'No query specified'
        if query:
            results = results.filter(
                reduce(or_, (Q(name__icontains=itm.strip()) for itm in query))
            )
        elif not error:
            error = 'Empty query'
        some_context = {
            'results' : results,
            'error': error
        }
        return render(request, 'app/some_template.html', some_context)

    存在且不是空字符串。如果是这样的话,错误是 'No query specified' 'Empty query' 发生在普通人身上 .split('\n')

    query reduce(..) Product S.

    render(..) some_template.html error result

    推荐文章