#34005: In Django 3.2 the ORM looses Meta.ordering default order when .annotate 
is
used
-------------------------------------+-------------------------------------
     Reporter:  Pieter Zieschang     |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  3.2
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:  orm Meta             |             Triage Stage:
  Options.ordering annotate          |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by Pieter Zieschang:

Old description:

> Hi,
> I've upgraded from 2.2 to 3.2 and now default ordering specified in the
> Model does not work anymore if i annotate the QuerySet.
> I suspect this is a ORM Bug, as the ordering / default order is not in
> the query anymore since the update to 3.2.
>

> Product class:
> {{{
> class Product(models.Model):
> ...
>     class Meta:
>         ordering = ["name"]
> }}}
>

> Default ordering is working nicely without annotate ... see ORDER BY
> {{{
> >>> print(Product.objects.all().select_related("category").query)
> SELECT "memberapp_product"."id",  [...] FROM "memberapp_product" INNER
> JOIN "memberapp_productcategory" ON ("memberapp_product"."category_id" =
> "memberapp_productcategory"."id")  ORDER BY "memberapp_product"."name"
> ASC
> }}}
>
> but not anymore when annotate (with a special sum) is used - no ORDER BY
> anymore in the query:
> {{{
> >>>
> print(Product.objects.all().select_related("category").annotate(**kwargs).query)
> SELECT "memberapp_product"."id", [...]  LEFT OUTER JOIN
> "memberapp_appointment" ON
> ("memberapp_appointmentattendee"."appointment_id" =
> "memberapp_appointment"."id") INNER JOIN "memberapp_productcategory" ON
> ("memberapp_product"."category_id" = "memberapp_productcategory"."id")
> GROUP BY "memberapp_product"."id", "memberapp_productcategory"."id"
> }}}
>
> Since it's been working before i would expect something in the ORM looses
> the order by in complex queries using annotate.
>
> Thanks for looking into this.

New description:

 Hi,
 I've upgraded from 2.2 to 3.2.15 and now default ordering specified in the
 Model does not work anymore if i annotate the QuerySet.
 I suspect this is a ORM Bug, as the ordering / default order is not in the
 query anymore since the update to 3.2.


 Product class:
 {{{
 class Product(models.Model):
 ...
     class Meta:
         ordering = ["name"]
 }}}


 Default ordering is working nicely without annotate ... see ORDER BY
 {{{
 >>> print(Product.objects.all().select_related("category").query)
 SELECT "memberapp_product"."id",  [...] FROM "memberapp_product" INNER
 JOIN "memberapp_productcategory" ON ("memberapp_product"."category_id" =
 "memberapp_productcategory"."id")  ORDER BY "memberapp_product"."name" ASC
 }}}

 but not anymore when annotate (with a special sum) is used - no ORDER BY
 anymore in the query:
 {{{
 >>>
 
print(Product.objects.all().select_related("category").annotate(**kwargs).query)
 SELECT "memberapp_product"."id", [...]  LEFT OUTER JOIN
 "memberapp_appointment" ON
 ("memberapp_appointmentattendee"."appointment_id" =
 "memberapp_appointment"."id") INNER JOIN "memberapp_productcategory" ON
 ("memberapp_product"."category_id" = "memberapp_productcategory"."id")
 GROUP BY "memberapp_product"."id", "memberapp_productcategory"."id"
 }}}

 Since it's been working before i would expect something in the ORM looses
 the order by in complex queries using annotate.

 Thanks for looking into this.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/34005#comment:1>
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070183298ddbca-8989a743-961a-4485-acdb-6f0ced0ef9f6-000000%40eu-central-1.amazonses.com.

Reply via email to