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) |