Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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 Django使用数组查询列值_Python_Arrays_Django_Search - Fatal编程技术网

Python Django使用数组查询列值

Python Django使用数组查询列值,python,arrays,django,search,Python,Arrays,Django,Search,我正在为我的网站做一个搜索功能,它将输入的文本按空格分隔,然后用____________________________。我想扩展它,这样我就可以通过我想要它检查的列,比如“名字”,“姓氏”。。。ect 我现在所拥有的: def getSearchQuery(search,list,columns=None): """ Breaks up the search string and makes a query list Filters the gi

我正在为我的网站做一个搜索功能,它将输入的文本按空格分隔,然后用____________________________。我想扩展它,这样我就可以通过我想要它检查的列,比如“名字”,“姓氏”。。。ect

我现在所拥有的:

def getSearchQuery(search,list,columns=None):
        """
        Breaks up the search string and makes a query list
        Filters the given list based on the query list
        """
        if not columns:
            columns = { name }
        search = search.strip('\'"').split(" ")
        for col in columns:
            queries = [Q(col__contains=value) for value in search]
            query = queries.pop()

            for item in queries:
                query |= item

        return list.filter(query)
问题是Q(col\uu contains=value)不起作用,因为“col”不是列。有没有办法告诉django这是一个变量而不是实际的列?我试过用谷歌搜索,但老实说,如果不把我所有的代码都放进去,我不知道如何表达它。

这样做:

import operator
from functools import reduce

def getSearchQuery(search, list, columns=None):
    """
    Breaks up the search string and makes a query list
    Filters the given list based on the query list
    """
    if not columns:
        return list
    search = search.strip('\'"').split(" ")
    queries = []
    for col in columns:
        queries.extend([Q((col+'__icontains', value)) for value in search])

    return list.filter(reduce(operator.or_, queries))

我不确定,但如果您只是在自己的代码中将
Q(col\uu contains=value)
更改为
Q(col+'\uu contains'=value)
,它是否有效?嗯,这会导致“太多的值需要解包(预期为2)”,但它似乎在正确的轨道上
query=querys.pop()
将在下一次迭代中覆盖
query
“未定义全局名称‘reduce’。reduce不是内置的python函数吗?是的,它是内置函数。您使用的是哪种python版本?我有python 3.2。如果我使用代码中的方式处理查询|=项,它会生成所有查询语句,但当我尝试筛选时,我会“得到许多要解压缩的值”“。有什么想法吗?可能您正在使用
python3+
。在python 3+中,reduce不再是一个内置函数,您必须从functools import reduce中执行
,更新我的答案。好的,即使有了您的答案,我也得到了“要解包的多个值”。打印“reduce(operator.or,查询)”仅提供“(AND:COLUMN\uu icontains,VAL)”