Opened 9 years ago
Last modified 9 years ago
#26071 closed Bug
IN queries inside conditional case expressions crashes on django 1.8 — at Initial Version
Reported by: | Alberto Avila | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.8 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
When making a IN filter expression inside a conditional case expression django crashes with the following exception:
AttributeError: 'SubqueryConstraint' object has no attribute 'lhs'
The stacktrace looks like:
lib/python2.7/site-packages/django/db/models/query.py line 794 in annotate
obj.query.add_annotation(annotation, alias, is_summary=False)
lib/python2.7/site-packages/django/db/models/sql/query.py line 983 in add_annotation
summarize=is_summary)
lib/python2.7/site-packages/django/db/models/aggregates.py line 21 in resolve_expression
if c.source_expressions[0].contains_aggregate and not summarize:
lib/python2.7/site-packages/django/utils/functional.py line 59 in get
res = instance.dict[self.name] = self.func(instance)
lib/python2.7/site-packages/django/db/models/expressions.py line 179 in contains_aggregate
if expr and expr.contains_aggregate:
lib/python2.7/site-packages/django/utils/functional.py line 59 in get
res = instance.dict[self.name] = self.func(instance)
lib/python2.7/site-packages/django/db/models/expressions.py line 179 in contains_aggregate
if expr and expr.contains_aggregate:
lib/python2.7/site-packages/django/utils/functional.py line 59 in get
res = instance.dict[self.name] = self.func(instance)
lib/python2.7/site-packages/django/db/models/sql/where.py line 324 in contains_aggregate
return self._contains_aggregate(self)
lib/python2.7/site-packages/django/db/models/sql/where.py line 320 in _contains_aggregate
return any(cls._contains_aggregate(c) for c in obj.children)
lib/python2.7/site-packages/django/db/models/sql/where.py line 320 in <genexpr>
return any(cls._contains_aggregate(c) for c in obj.children)
lib/python2.7/site-packages/django/db/models/sql/where.py line 319 in _contains_aggregate
return getattr(obj.lhs, 'contains_aggregate', False) or getattr(obj.rhs, 'contains_aggregate', False)
AttributeError: 'SubqueryConstraint' object has no attribute 'lhs'
This error is already fixed on django 1.9 branch. The problem was fixed with this commit:
I'll create a PR with the changes from that commit that fixes the issue, not sure if the entire commit can be (or should be) backported to 1.8