From ed166c918c9a14673d33e071488189c37d24b877 Mon Sep 17 00:00:00 2001
From: Simon Charette <charette.s@gmail.com>
Date: Fri, 1 Mar 2013 15:32:39 -0500
Subject: [PATCH 2/2] Fixed #10399 -- Tested that o2o field updates are not
constrained by an inner query.
---
tests/model_inheritance/tests.py | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/tests/model_inheritance/tests.py b/tests/model_inheritance/tests.py
index 16d2242..46cef3a 100644
a
|
b
|
|
1 | | from __future__ import absolute_import |
| 1 | from __future__ import absolute_import, unicode_literals |
2 | 2 | |
3 | 3 | from operator import attrgetter |
4 | 4 | |
5 | 5 | from django.core.exceptions import FieldError |
| 6 | from django.db import connection |
6 | 7 | from django.test import TestCase |
| 8 | from django.test.testcases import CaptureQueriesContext |
7 | 9 | from django.utils import six |
8 | 10 | |
9 | 11 | from .models import (Chef, CommonInfo, ItalianRestaurant, ParkingLot, Place, |
… |
… |
class ModelInheritanceTests(TestCase):
|
294 | 296 | ) |
295 | 297 | with self.assertNumQueries(6): |
296 | 298 | 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) |