#26071: IN queries inside conditional case expressions crashes on django 1.8
----------------------------------------------+--------------------
Reporter: albertein | Owner: nobody
Type: Bug | Status: new
Component: Database layer (models, ORM) | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------------------+--------------------
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:
https://github.com/django/django/commit/afe0bb7b13bb8dc4370f32225238012c873b0ee3
#diff-73bc0dcb1a1c931adcf1d344abca22ffR180
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
--
Ticket URL: <https://code.djangoproject.com/ticket/26071>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.92c1f77289923b7a36418ed75911bb9c%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.