#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.