[Django] #30463: Deprecation message generates error when query expression is used in Meta.ordering

103 views
Skip to first unread message

Django

unread,
May 8, 2019, 8:28:12 AM5/8/19
to django-...@googlegroups.com
#30463: Deprecation message generates error when query expression is used in
Meta.ordering
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: nobody
Type: | Status: new
Uncategorized |
Component: Database | Version: 2.2
layer (models, ORM) |
Severity: Normal | Keywords: ordering
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
-------------------------------------+-------------------------------------
Since updating to Django 2.2 our test suite fails because the newly
introduced deprecation warning which warns about Meta.ordering being
ignored from Django 3.1 onwards leads to errors when a query expression is
used.

Take a model definition like this as an example:


{{{
class Book
name = models.CharField(max_length=255)

class Meta:
ordering = [F('name',).asc()]

}}}

The error happens here:

{{{
File "django/django/db/models/sql/compiler.py", line 558, in as_sql
"', '".join(self._meta_ordering)
TypeError: sequence item 0: expected str instance, OrderBy found
}}}

A quick and dirty way around that problem is to join the string
representations of all the list items instead of concatenating them
directly:

{{{
warnings.warn(
"%s QuerySet won't use Meta.ordering in Django 3.1. "
"Add .order_by('%s') to retain the current query." % (
self.query.model.__name__,
"', '".join([str(f) for f in self._meta_ordering])
),
)
}}}

Unfortunately this doesn't generate real source code compatible with
`.order_by()` because the quotation marks are not correct.
Maybe someone else has a clean solution on how to fix this?

{{{
- Book QuerySet won't use Meta.ordering in Django 3.1. Add
.order_by('name', 'OrderBy(F(price), descending=False)') to retain the
current query.
- -
+ Book QuerySet won't use Meta.ordering in Django 3.1. Add
.order_by('name', OrderBy(F('price'), descending=False)) to retain the
current query.
}}}


A regression test is available here: https://github.com/jnns/django/tree
/meta-ordering-deprecation-warning

--
Ticket URL: <https://code.djangoproject.com/ticket/30463>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
May 8, 2019, 8:38:31 AM5/8/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.

-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* type: Uncategorized => Bug
* severity: Normal => Release blocker


Comment:

Thanks for the report!

Reproduced at ef9f2eb69c9396683cefa742bc7d0a0792090e8d.
Regression in 1b1f64ee5a78cc217fead52cbae23114502cf564.

--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:1>

Django

unread,
May 8, 2019, 8:42:39 AM5/8/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* Attachment "ticket-30463.diff" added.

Regression test.

Django

unread,
May 9, 2019, 2:37:24 AM5/9/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson):

* stage: Unreviewed => Accepted


--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:2>

Django

unread,
May 10, 2019, 1:24:03 PM5/10/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: assigned

Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Ruchit Vithani):

* status: new => assigned
* owner: nobody => Ruchit Vithani


--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:3>

Django

unread,
May 10, 2019, 1:28:07 PM5/10/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Ruchit Vithani):

Replying to [comment:2 Carlton Gibson]: Is it alright if I assign this
ticket to me?

--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:4>

Django

unread,
May 10, 2019, 6:55:51 PM5/10/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Simon Charette):

Replying to [comment:4 Ruchit Vithani]: Feel free to assign the ticket to
yourself if you plan on working on it.

--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:5>

Django

unread,
May 17, 2019, 1:13:03 PM5/17/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Ruchit Vithani):

* needs_better_patch: 0 => 1
* has_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:6>

Django

unread,
May 17, 2019, 1:18:39 PM5/17/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Ruchit Vithani):

Link to patch : [https://github.com/django/django/pull/11377]

--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:7>

Django

unread,
May 18, 2019, 1:32:12 PM5/18/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: assigned
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: ordering | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* needs_better_patch: 1 => 0
* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:8>

Django

unread,
May 18, 2019, 2:06:05 PM5/18/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: closed

Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution: fixed

Keywords: ordering | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak <felisiak.mariusz@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"04042b2b440f0bf50eb908d52cfe76af430e1738" 04042b2b]:
{{{
#!CommitTicketReference repository=""
revision="04042b2b440f0bf50eb908d52cfe76af430e1738"
Fixed #30463 -- Fixed crash of deprecation message when Meta.ordering
contains expressions.

Regression in 1b1f64ee5a78cc217fead52cbae23114502cf564.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:9>

Django

unread,
May 18, 2019, 2:06:25 PM5/18/19
to django-...@googlegroups.com
#30463: Deprecation message crashes when using a query expression in
Model.ordering.
-------------------------------------+-------------------------------------
Reporter: Jannis | Owner: Ruchit
| Vithani
Type: Bug | Status: closed
Component: Database layer | Version: 2.2
(models, ORM) |
Severity: Release blocker | Resolution: fixed
Keywords: ordering | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 1 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Mariusz Felisiak <felisiak.mariusz@…>):

In [changeset:"db7d7901eeacf37f0a6f124e3733c4f121a23e76" db7d7901]:
{{{
#!CommitTicketReference repository=""
revision="db7d7901eeacf37f0a6f124e3733c4f121a23e76"
[2.2.x] Fixed #30463 -- Fixed crash of deprecation message when
Meta.ordering contains expressions.

Regression in 1b1f64ee5a78cc217fead52cbae23114502cf564.

Backport of 04042b2b440f0bf50eb908d52cfe76af430e1738 from master
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/30463#comment:10>

Reply all
Reply to author
Forward
0 new messages