diff options
| author | Simon Charette <charette.s@gmail.com> | 2021-05-04 17:49:46 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-05-05 08:44:37 +0200 |
| commit | 364098fdac597d2293d844d81ab523c22ca5a361 (patch) | |
| tree | e044f0643cd4565e95017400c4b3feedf2d8f948 | |
| parent | df801dde3344549bcd8db2abe6b0e4ac23f278ca (diff) | |
[3.2.x] Fixed #32714 -- Prevented recreation of migration for Meta.ordering with OrderBy expressions.
Regression in c8b659430556dca0b2fe27cf2ea0f8290dbafecd.
Thanks Kevin Marsh for the report.
Backport of 96f55ccf798c7592a1203f798a4dffaf173a9263 from main
| -rw-r--r-- | django/db/models/expressions.py | 3 | ||||
| -rw-r--r-- | docs/releases/3.2.2.txt | 4 | ||||
| -rw-r--r-- | tests/expressions/tests.py | 22 |
3 files changed, 26 insertions, 3 deletions
diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index d945e57f06..08ee5fe18b 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -1174,8 +1174,7 @@ class Exists(Subquery): return sql, params -@deconstructible -class OrderBy(BaseExpression): +class OrderBy(Expression): template = '%(expression)s %(ordering)s' conditional = False diff --git a/docs/releases/3.2.2.txt b/docs/releases/3.2.2.txt index 47a541add0..d47da08d6c 100644 --- a/docs/releases/3.2.2.txt +++ b/docs/releases/3.2.2.txt @@ -9,4 +9,6 @@ Django 3.2.2 fixes several bugs in 3.2.1. Bugfixes ======== -* ... +* Prevented, following a regression in Django 3.2.1, :djadmin:`makemigrations` + from generating infinite migrations for a model with ``Meta.ordering`` + contained ``OrderBy`` expressions (:ticket:`32714`). diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py index 9a34242de7..bea7633a49 100644 --- a/tests/expressions/tests.py +++ b/tests/expressions/tests.py @@ -1947,3 +1947,25 @@ class ExpressionWrapperTests(SimpleTestCase): group_by_cols = expr.get_group_by_cols(alias=None) self.assertEqual(group_by_cols, [expr.expression]) self.assertEqual(group_by_cols[0].output_field, expr.output_field) + + +class OrderByTests(SimpleTestCase): + def test_equal(self): + self.assertEqual( + OrderBy(F('field'), nulls_last=True), + OrderBy(F('field'), nulls_last=True), + ) + self.assertNotEqual( + OrderBy(F('field'), nulls_last=True), + OrderBy(F('field'), nulls_last=False), + ) + + def test_hash(self): + self.assertEqual( + hash(OrderBy(F('field'), nulls_last=True)), + hash(OrderBy(F('field'), nulls_last=True)), + ) + self.assertNotEqual( + hash(OrderBy(F('field'), nulls_last=True)), + hash(OrderBy(F('field'), nulls_last=False)), + ) |
