I'm trying to chain Django Q() objects with code piece below:
excludes = None
for val in service_dict.values():
field_filter_name = field_name.format(val)
exclude_filter = {field_filter_name + "__isnull": True}
if excludes is None:
excludes = Q(**exclude_filter)
else:
excludes |= Q(**exclude_filter)
On run time, when code hit to excludes = Q(**exclude_filter)
line on first loop, throwing this error:
File "/lib/python3.6/site-packages/lxml/builder.py", line 218, in call
get(dict)(elem, attrib)
File "/lib/python3.6/site-packages/lxml/builder.py", line 205, in add_dict
attrib[k] = typemap[type(v)](None, v)
KeyError: <class 'bool'>
I'm quite certain that the values are string type. But this is working on python shell in the same environment:
In [9]: Q(**{"foo__isnull": True})
Out[9]: <Q: (AND: ('foo__isnull', True))>
I also tried outside of the environment:
>>> a = {'foo': True}
>>> def k(foo):
... print(foo)
...
>>> k(**a)
True
On the other hand; that kind of usage of the kwargs are working at any other part of the code.
How could this issue be solved?
EDIT:
Full traceback:
Traceback (most recent call last):
File "/env/lib/python3.6/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
return self.application(environ, start_response)
File "/env/lib/python3.6/site-packages/django/core/handlers/wsgi.py", line 170, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 124, in get_response
response = self._middleware_chain(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/utils/deprecation.py", line 133, in __call__
response = self.get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = response_for_exception(request, exc)
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/env/lib/python3.6/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
six.reraise(exc_type, exc_value, tb)
File "/env/lib/python3.6/site-packages/six.py", line 686, in reraise
raise value
File "/env/lib/python3.6/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/env/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/project/foobar/products/views.py", line 1267, in product_list_view
filters, excludes = apply_filters(request)
File "/project/foobar/products/views.py", line 1085, in apply_filters
excludes = Q(**exclude_filter)
File "/env/lib/python3.6/site-packages/lxml/builder.py", line 218, in __call__
get(dict)(elem, attrib)
File "/env/lib/python3.6/site-packages/lxml/builder.py", line 205, in add_dict
attrib[k] = typemap[type(v)](None, v)
KeyError: <class 'bool'>
Presumably you have instantiated an lxml object and called it Q
earlier in your code, which is overwriting the Q object you imported from django.db.models. Rename the object.