Fixed #28166 -- Fixed Model._state.db on MTI parent model after saving child model.

Regression in 38575b007a.
This commit is contained in:
Tim Graham 2017-05-03 10:39:54 -04:00
parent 362fba87c9
commit 584e10c76e
3 changed files with 11 additions and 1 deletions

View File

@ -271,7 +271,9 @@ class ForwardOneToOneDescriptor(ForwardManyToOneDescriptor):
# on the related model for every deferred field.
if not any(field in fields for field in deferred):
kwargs = {field: getattr(instance, field) for field in fields}
return rel_model(**kwargs)
obj = rel_model(**kwargs)
obj._state.db = instance._state.db
return obj
return super().get_object(instance)

View File

@ -84,3 +84,7 @@ Bugfixes
* Fixed crash in ``BaseInlineFormSet._construct_form()`` when using
``save_as_new`` (:ticket:`28159`).
* Fixed a regression where ``Model._state.db`` wasn't set correctly on
multi-table inheritance parent models after saving a child model
(:ticket:`28166`).

View File

@ -472,6 +472,10 @@ class ModelInheritanceTest(TestCase):
jane = Supplier.objects.order_by("name").select_related("restaurant")[0]
self.assertEqual(jane.restaurant.name, "Craft")
def test_ptr_accessor_assigns_db(self):
r = Restaurant.objects.create()
self.assertEqual(r.place_ptr._state.db, 'default')
def test_related_filtering_query_efficiency_ticket_15844(self):
r = Restaurant.objects.create(
name="Guido's House of Pasta",