Opened 2 days ago
Last modified 12 hours ago
#36155 closed Cleanup/optimization
Improve error handling when complex annotations are not passed an alias — at Initial Version
Reported by: | Vinko Mlacic | Owned by: | Vinko Mlacic |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Vinko Mlacic | 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
When complex annotations are not passed an alias, the default alias is usually used. If the annotate
arg does not define the default alias, an error saying "Complex annotations require an alias" is raised.
This works fine with args that are subclasses of Aggregate
subclass because the default_alias
property on the Aggregate
subclass raises that same TypeError
.
However, when using expressions that are not Aggregate
subclasses, this fails with an obscure message saying that default_alias
is not a property on the expression object.
Code to reproduce:
models.py:
class Book(models.Model): name = models.CharField(max_length=255)
tests.py:
Book.objects.annotate(Value("title"))
Similar happens with other non Aggregate
types like: F
, Case
- When
, Subquery
, Exists
, ...