Opened 2 years ago

Last modified 2 years ago

#34016 closed Bug

QuerySet.values_list crash when using ArrayAgg — at Version 2

Reported by: Alex Kerkum Owned by:
Component: contrib.postgres Version: 4.1
Severity: Release blocker Keywords:
Cc: Simon Charette Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Alex Kerkum)

Using ArrayAgg in combination with values_list results in 'TypeError: Complex expressions require an alias'.

For example:

from django.contrib.postgres.aggregates import ArrayAgg
SampleUser.objects.values_list(ArrayAgg("post_id"))

File django/db/models/aggregates.py:98, in Aggregate.default_alias(self)
     96 if len(expressions) == 1 and hasattr(expressions[0], "name"):
     97     return "%s__%s" % (expressions[0].name, self.name.lower())
---> 98 raise TypeError("Complex expressions require an alias")

TypeError: Complex expressions require an alias

The expressions variable here seems to contain [F(post_id), OrderByList()] causing the len(expressions) check to fail. That's as far as I got.

To me this seems related to #33898 caused by a regression in https://github.com/django/django/commit/e06dc4571ea9fd5723c8029959b95808be9f8812

This still worked in 4.0.7.

Change History (2)

comment:1 by Alex Kerkum, 2 years ago

Description: modified (diff)

comment:2 by Alex Kerkum, 2 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top