~\.venv\django_tutorial\lib\site-packages\django\db\models\sql\query.py in
set_group_by(self, allow_aliases)
1979 if not allow_aliases or alias in column_names:
1980 alias = None
-> 1981 group_by_cols =
annotation.get_group_by_cols(alias=alias)
1982 group_by.extend(group_by_cols)
1983 self.group_by = tuple(group_by)
~\.venv\django_tutorial\lib\site-packages\django\db\models\expressions.py
in get_group_by_cols(self, alias)
867
868 def get_group_by_cols(self, alias=None):
--> 869 expression = self.expression.copy()
870 expression.output_field = self.output_field
871 return expression.get_group_by_cols(alias=alias)
AttributeError: 'WhereNode' object has no attribute 'copy'
}}}
It's a bit of a dumb query but given my usecase https://pypi.org/project
/django-data-browser/ that's a little beyond my control.
Still it's kinda surprising that it worked on 3.0 and doesn't on 3.1.
It can be simplified a bit and still get essentially the same result:
{{{#!python
Question.objects.annotate(
pub_date__count=Count("pub_date", distinct=True),
pub_date__is_null=ExpressionWrapper(Q(pub_date=None),
output_field=BooleanField())
)
}}}
Removing either of the annotate clauses "fixes" it.
--
Ticket URL: <https://code.djangoproject.com/ticket/32007>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
Comment (by Gordon Wrigley):
Here is a more useful variant, this is a type thing I actually do on a
regular basis, and I guess also means work won't be upgrading to 3.1 until
I find a work around.
{{{#!python
Question.objects.annotate(
pub_date__is_null=ExpressionWrapper(Q(pub_date=None),
output_field=BooleanField())
).values("pub_date__is_null").annotate(
id__count=Count("id", distinct=True)
).values("pub_date__is_null", "id__count")
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:3>
Comment (by Gordon Wrigley):
Also as a total aside regarding that last snippet it'd be nice if Q
objects just were boolean expressions.
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:4>
* owner: nobody => felixxm
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:5>
* has_patch: 0 => 1
Comment:
[https://github.com/django/django/pull/13422 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:6>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"eaf9764d3bb25970da89de5799d8d308715628ba" eaf9764d]:
{{{
#!CommitTicketReference repository=""
revision="eaf9764d3bb25970da89de5799d8d308715628ba"
Fixed #32007 -- Fixed queryset crash with Q() annotation and aggregation.
Thanks Gordon Wrigley for the report.
Regression in 8a6df55f2dd5131282084a4edfd48f63fbf8c69a.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:7>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"1afc9b31bb4f3f5f921060ca42d76aed5edda6e3" 1afc9b3]:
{{{
#!CommitTicketReference repository=""
revision="1afc9b31bb4f3f5f921060ca42d76aed5edda6e3"
[3.1.x] Fixed #32007 -- Fixed queryset crash with Q() annotation and
aggregation.
Thanks Gordon Wrigley for the report.
Regression in 8a6df55f2dd5131282084a4edfd48f63fbf8c69a.
Backport of eaf9764d3bb25970da89de5799d8d308715628ba from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:8>
Comment (by GitHub <noreply@…>):
In [changeset:"3a9f192b131f7a9b0fe5783c684b23015fa67cc8" 3a9f192]:
{{{
#!CommitTicketReference repository=""
revision="3a9f192b131f7a9b0fe5783c684b23015fa67cc8"
Refs #32007 -- Skipped test_q_expression_annotation_with_aggregation on
Oracle.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:9>
Comment (by Mariusz Felisiak <felisiak.mariusz@…>):
In [changeset:"5a03e14deb55c381b2908fdeff884137ca8e43a4" 5a03e14d]:
{{{
#!CommitTicketReference repository=""
revision="5a03e14deb55c381b2908fdeff884137ca8e43a4"
[3.1.x] Refs #32007 -- Skipped
test_q_expression_annotation_with_aggregation on Oracle.
Backport of 3a9f192b131f7a9b0fe5783c684b23015fa67cc8 from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:10>
Comment (by Gordon Wrigley):
I think this is related to https://code.djangoproject.com/ticket/32200
--
Ticket URL: <https://code.djangoproject.com/ticket/32007#comment:11>