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