|
@@ -7,7 +7,10 @@ from django.db.models.functions import Abs, Concat, Lower
|
|
|
from django.test import TestCase
|
|
|
from django.test.utils import register_lookup
|
|
|
|
|
|
-from .models import A, B, Bar, D, DataPoint, Foo, RelatedPoint, UniqueNumber
|
|
|
+from .models import (
|
|
|
+ A, B, Bar, D, DataPoint, Foo, RelatedPoint, UniqueNumber,
|
|
|
+ UniqueNumberChild,
|
|
|
+)
|
|
|
|
|
|
|
|
|
class SimpleTest(TestCase):
|
|
@@ -249,3 +252,26 @@ class MySQLUpdateOrderByTest(TestCase):
|
|
|
).order_by('number_inverse').update(
|
|
|
number=F('number') + 1,
|
|
|
)
|
|
|
+
|
|
|
+ def test_order_by_update_on_parent_unique_constraint(self):
|
|
|
+
|
|
|
+
|
|
|
+ UniqueNumberChild.objects.create(number=3)
|
|
|
+ UniqueNumberChild.objects.create(number=4)
|
|
|
+ with self.assertRaises(IntegrityError):
|
|
|
+ UniqueNumberChild.objects.order_by('number').update(
|
|
|
+ number=F('number') + 1,
|
|
|
+ )
|
|
|
+
|
|
|
+ def test_order_by_update_on_related_field(self):
|
|
|
+
|
|
|
+
|
|
|
+ data = DataPoint.objects.create(name='d0', value='apple')
|
|
|
+ related = RelatedPoint.objects.create(name='r0', data=data)
|
|
|
+ with self.assertNumQueries(1) as ctx:
|
|
|
+ updated = RelatedPoint.objects.order_by('data__name').update(name='new')
|
|
|
+ sql = ctx.captured_queries[0]['sql']
|
|
|
+ self.assertNotIn('ORDER BY', sql)
|
|
|
+ self.assertEqual(updated, 1)
|
|
|
+ related.refresh_from_db()
|
|
|
+ self.assertEqual(related.name, 'new')
|