#14357: Prevent innapropriate order-based grouping on values+annotate queries
-------------------------------------+-------------------------------------
     Reporter:  Martin Chase         |                    Owner:  (none)
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  1
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Simon Charette):

 I think we should go as far as requiring all ordering clauses to be
 explicitly specified through `values()` when used to group by.

 For example, in the following case

 `Foo.objects.order_by('name').values('type').annotate(Count('name'))`

 A deprecation warning would be raised to notify the user that `'name'`
 won't automatically be added to `values()` in future Django version where
 the previous queryset would be equivalent to the following:

 `Foo.objects.values('type').annotate(Count('name'))`

 and the current behaviour could be preserved by adding `'name'` to
 `values()`:

 `Foo.objects.order_by('name').values('type',
 'name').annotate(Count('name'))`

 I haven't tested it myself to see if it's already the case but we should
 also disallow ordering by a non-grouped column or aggregate alias.

 `Foo.objects.values('type').annotate(Count('name')).order_by('name')`
 should raise a value error on the `order_by('name')` call.

--
Ticket URL: <https://code.djangoproject.com/ticket/14357#comment:11>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/070.b1396c53abdbbd6172922849885e426f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to