#11096: .values including related fields does not work when specified after an
aggregate's .annotate
--------------------------------------+-------------------------------------
Reporter: dgouldin | Owner:
Status: new | Milestone:
Component: ORM aggregation | Version: SVN
Resolution: | Keywords:
Stage: Accepted | Has_patch: 0
Needs_docs: 0 | Needs_tests: 0
Needs_better_patch: 0 |
--------------------------------------+-------------------------------------
Changes (by cmutel):
* cc: [email protected] (added)
* version: 1.0 => SVN
Comment:
This doesn't appear to affect sqlite, but is still a problem for
postgresql using trunk. However, the problem rests with Django's ORM,
because if ''annotate'' comes after ''values'' then the SQL is correct. I
assume that postgres is simply stricter in what it accepts. A simple test
query, using the models in the ticket:
{{{
Book.objects.annotate(num_authors=Count('author')).values('author__name')
}}}
produces the following SQL:
{{{
SELECT "tester_author"."name"
FROM "tester_book"
INNER JOIN "tester_author" ON ("tester_book"."author_id" =
"tester_author"."id")
GROUP BY "tester_book"."id",
"tester_book"."name",
"tester_book"."author_id"
}}}
And raises
{{{
ProgrammingError: column "tester_author.name" must appear in the GROUP BY
clause or be used in an aggregate function
}}}
However, putting the annotate clause at the end results in the correct
""GROUP BY"" clause:
{{{
SELECT "tester_author"."name", COUNT("tester_book"."author_id") AS
"num_authors"
FROM "tester_book"
INNER JOIN "tester_author" ON ("tester_book"."author_id" =
"tester_author"."id")
GROUP BY "tester_author"."name"
}}}
I think this problem is related to tickets
[http://code.djangoproject.com/ticket/10060 10060] and
[http://code.djangoproject.com/ticket/12608 12608].
--
Ticket URL: <http://code.djangoproject.com/ticket/11096#comment:3>
Django <http://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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.