我正在构建我的过滤器作为列表但是在使用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__contains=gb)
而不是Q('fieldname__contains=gb')
的形式获得Q(..),这似乎引发了诸如以下问题:
ValueError
Exception Value:
need more than 1 value to unpack
我应该如何构建Q查询以避免此解包问题?
回溯可能的答案(下)
Traceback:
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/home/brett/LinkedIn/phaseone/jelt/views.py" in AboutMeList
259. list = AboutMe.objects.order_by('MyLinkedInLastName').filter(MyLocationFilter)
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py" in filter
624. return self._filter_or_exclude(False, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py" in _filter_or_exclude
642. clone.query.add_q(Q(*args, **kwargs))
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py" in add_q
1250. can_reuse=used_aliases, force_having=force_having)
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py" in add_filter
1056. arg, value = filter_expr
Exception Type: ValueError at /list/
Exception Value: need more than 1 value to unpack
答案 0 :(得分:2)
通过解压缩dict来传递关键字参数。
strpitem = item.strip('[],')
key = fieldname + "__contains"
d = {key: strpitem}
queryitem = Q(**d)