Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Sql 在Django中构建自定义查询筛选器列表_Sql_Django - Fatal编程技术网

Sql 在Django中构建自定义查询筛选器列表

Sql 在Django中构建自定义查询筛选器列表,sql,django,Sql,Django,我正在以列表的形式构建过滤器,但在使用Q函数构建过滤器时遇到了问题。看起来手动操作过滤器是可行的,但是当试图通过连接字符串来构建过滤器时,我遇到了以下问题: 以下是查询: MyLocationFilter = BuildQueryORFilter('MyLocationCountryCode', MyLocationCodePref1) list = AboutMe.objects.order_by('MyLinkedInLastName').filter(reduce(OR, MyLocati

我正在以列表的形式构建过滤器,但在使用Q函数构建过滤器时遇到了问题。看起来手动操作过滤器是可行的,但是当试图通过连接字符串来构建过滤器时,我遇到了以下问题:

以下是查询:

MyLocationFilter = BuildQueryORFilter('MyLocationCountryCode', MyLocationCodePref1)
list = AboutMe.objects.order_by('MyLinkedInLastName').filter(reduce(OR, MyLocationFilter))
下面是我如何构建这些过滤器的:

def BuildQueryORFilter(fieldname, fieldvalues):
    QueryList = []
    spltfieldvalues = fieldvalues.split()
    for item in spltfieldvalues:
        strpitem = item.strip('[],')
        queryitem = Q(fieldname+"__contains="+strpitem)
        QueryList.append(queryitem)
    return QueryList
然而,问题似乎是如何以
Q(fieldname\uuuuu contains=gb)
的形式获得Q(..),而不是
Q('fieldname\uuuuuu contains=gb')
,这似乎引发了以下问题:

ValueError
Exception Value:    
need more than 1 value to unpack
我应该如何构建Q查询以避免这个解包问题

回溯可能的答案(如下)


通过解压dict传递关键字参数

    strpitem = item.strip('[],')
    key = fieldname + "__contains"
    d = {key: strpitem}
    queryitem = Q(**d)

我将此绑定,但当将查询项打印到屏幕时,我得到:(AND:('MyLocationCountryCode\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu包含',u'gb'),并且在尝试筛选时?打印字典
d
的结果是什么?我的建议中可能有一个输入错误,或者你的问题中有另一个我没有发现的错误,但它肯定更接近正确的解决方案。无法将单个字符串参数传递给
Q()
;charset=utf-8{'MyLocationCountryCode\uuuuuu包含:u'gb'}我似乎找不到一个聪明的方法来解包,因为我无法发现任何其他bug。我会从一些非常基本的东西开始,比如
d={'MyLocationCountryCode\uuuu contains':'gb'}
关于me.objects.filter(Q(**d))
,然后从那里构建方法的功能。祝你好运
    strpitem = item.strip('[],')
    key = fieldname + "__contains"
    d = {key: strpitem}
    queryitem = Q(**d)