Skip to content

Commit fb3d85b

Browse files
committed
Fixed django#10399 -- Tested that o2o field updates are not constrained by an inner query.
1 parent 952ba52 commit fb3d85b

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

tests/model_inheritance/tests.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
from __future__ import absolute_import
1+
from __future__ import absolute_import, unicode_literals
22

33
from operator import attrgetter
44

55
from django.core.exceptions import FieldError
6+
from django.db import connection
67
from django.test import TestCase
8+
from django.test.testcases import CaptureQueriesContext
79
from django.utils import six
810

911
from .models import (Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place,
@@ -294,3 +296,25 @@ def test_update_query_counts(self):
294296
)
295297
with self.assertNumQueries(6):
296298
ir.save()
299+
300+
def test_update_parent_filtering(self):
301+
"""
302+
Test that updating a field of a model subclass doesn't issue an UPDATE
303+
query constrained by an inner query.
304+
Refs #10399
305+
"""
306+
supplier = Supplier.objects.create(
307+
name='Central market',
308+
address='610 some street'
309+
)
310+
# Capture the expected query in a database agnostic way
311+
with CaptureQueriesContext(connection) as captured_queries:
312+
Place.objects.filter(pk=supplier.pk).update(name=supplier.name)
313+
expected_sql = captured_queries[0]['sql']
314+
# Capture the queries executed when a subclassed model instance is saved.
315+
with CaptureQueriesContext(connection) as captured_queries:
316+
supplier.save(update_fields=('name',))
317+
for query in captured_queries:
318+
sql = query['sql']
319+
if 'UPDATE' in sql:
320+
self.assertEqual(expected_sql, sql)

0 commit comments

Comments
 (0)