summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Wobrock <david.wobrock@gmail.com>2022-06-17 09:19:49 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-06-17 10:06:12 +0200
commitf4680a112d01d85540411673eade31f37712d0a6 (patch)
tree59f39adfa757bdff34e9506476d455aa1a59f796
parente286ce17ff8bf72a248ce3177bbd5163c50a6ded (diff)
downloaddjango-f4680a112d01d85540411673eade31f37712d0a6.tar.gz
Refs #28897 -- Added test for QuerySet.update() on querysets ordered by inline m2m annotation.
-rw-r--r--django/db/backends/mysql/features.py5
-rw-r--r--tests/update/models.py1
-rw-r--r--tests/update/tests.py7
3 files changed, 13 insertions, 0 deletions
diff --git a/django/db/backends/mysql/features.py b/django/db/backends/mysql/features.py
index 3ea3deeae3..9f66a01e74 100644
--- a/django/db/backends/mysql/features.py
+++ b/django/db/backends/mysql/features.py
@@ -109,6 +109,11 @@ class DatabaseFeatures(BaseDatabaseFeatures):
"scalar value but it's not implemented (#25287).": {
"expressions.tests.FTimeDeltaTests.test_durationfield_multiply_divide",
},
+ "UPDATE ... ORDER BY syntax on MySQL/MariaDB does not support ordering by"
+ "related fields.": {
+ "update.tests.AdvancedTests."
+ "test_update_ordered_by_inline_m2m_annotation",
+ },
}
if "ONLY_FULL_GROUP_BY" in self.connection.sql_mode:
skips.update(
diff --git a/tests/update/models.py b/tests/update/models.py
index 3993763eca..d7452dc302 100644
--- a/tests/update/models.py
+++ b/tests/update/models.py
@@ -41,6 +41,7 @@ class Foo(models.Model):
class Bar(models.Model):
foo = models.ForeignKey(Foo, models.CASCADE, to_field="target")
m2m_foo = models.ManyToManyField(Foo, related_name="m2m_foo")
+ x = models.IntegerField(default=0)
class UniqueNumber(models.Model):
diff --git a/tests/update/tests.py b/tests/update/tests.py
index 15a657fab0..0c3a399514 100644
--- a/tests/update/tests.py
+++ b/tests/update/tests.py
@@ -225,6 +225,13 @@ class AdvancedTests(TestCase):
new_name=annotation,
).update(name=F("new_name"))
+ def test_update_ordered_by_inline_m2m_annotation(self):
+ foo = Foo.objects.create(target="test")
+ Bar.objects.create(foo=foo)
+
+ Bar.objects.order_by(Abs("m2m_foo")).update(x=2)
+ self.assertEqual(Bar.objects.get().x, 2)
+
@unittest.skipUnless(
connection.vendor == "mysql",