diff --git a/cachalot/utils.py b/cachalot/utils.py index 6b18496..881262e 100644 --- a/cachalot/utils.py +++ b/cachalot/utils.py @@ -7,6 +7,7 @@ from hashlib import sha1 from time import time from uuid import UUID +from django import VERSION as django_version from django.db import connections from django.db.models.sql import Query from django.db.models.sql.where import ExtraWhere, SubqueryConstraint @@ -18,6 +19,9 @@ from .signals import post_invalidation from .transaction import AtomicCache +DJANGO_LTE_1_8 = django_version <= (1, 8) + + class UncachableQuery(Exception): pass @@ -124,8 +128,10 @@ def _get_tables(query, db_alias): tables = set(query.table_map) tables.add(query.get_meta().db_table) - subquery_constraints = _find_subqueries(query.where.children - + query.having.children) + children = query.where.children + if DJANGO_LTE_1_8: + children += query.having.children + subquery_constraints = _find_subqueries(children) for subquery in subquery_constraints: tables.update(_get_tables(subquery, db_alias)) if query.extra_select or hasattr(query, 'subquery') \