0
我构建过滤器作为列表,但无法使用Q函数构建它们。这似乎是做事手动过滤器的工作,但试图建立的连接字符串,我得到以下问题的过滤器时:在Django中构建自定义查询过滤器列表
下面是该查询:
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(..)而不是Q('fieldname__contains=gb')
这似乎是呕吐的问题,如:
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
我绑这一点,但打印出来queryitem筛选时,我得到:(AND(“MyLocationCountryCode__contains”,u'gb')),并试图筛选时,我仍然得到同样的问题。 – disruptive
你可以更新你的答案,包括完整的追溯? – Alasdair
添加了追踪 – disruptive