Closed
Description
Since commit 844353e, SQL query params are used to detect duplicate queries. A duplicate_key
is created and then used as a key to a dict:
This fails when raw_params
contains non-hashable items like lists. I saw it happen for the following query using a Postgres ArrayField
, but it should also be triggered by a simple :.filter(pk__in=[1, 2, 3])
cls.objects.filter(
Q(to_emails__contains=[customer.email]) |
Q(cc_emails__contains=[customer.email]) |
Q(bcc_emails__contains=[customer.email])
)
Traceback (most recent call last):
File "/.../lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/.../lib/python3.6/site-packages/django/utils/deprecation.py", line 97, in __call__
response = self.process_response(request, response)
File "/.../lib/python3.6/site-packages/debug_toolbar/middleware.py", line 126, in process_response
panel.generate_stats(request, response)
File "/.../lib/python3.6/site-packages/debug_toolbar/panels/sql/panel.py", line 178, in generate_stats
query_duplicates[alias][duplicate_key(query)] += 1
TypeError: unhashable type: 'list'
(Edit: passing lists to __in
works fine.)
Metadata
Metadata
Assignees
Labels
No labels