Commit f5a33e48 authored by Raphael Merx's avatar Raphael Merx Committed by Tim Graham
Browse files

Fixed #25296 -- Prevented model related object cache pollution when create()...

Fixed #25296 -- Prevented model related object cache pollution when create() fails due to an unsaved object.
parent c21410ae
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -643,6 +643,9 @@ class Model(six.with_metaclass(ModelBase)):
                # constraints aren't supported by the database, there's the
                # unavoidable risk of data corruption.
                if obj and obj.pk is None:
                    # Remove the object from a related instance cache.
                    if not field.remote_field.multiple:
                        delattr(obj, field.remote_field.get_cache_name())
                    raise ValueError(
                        "save() prohibited to prevent data loss due to "
                        "unsaved related object '%s'." % field.name
+5 −0
Original line number Diff line number Diff line
@@ -135,9 +135,14 @@ class OneToOneTests(TestCase):
        should raise an exception.
        """
        place = Place(name='User', address='London')
        with self.assertRaises(Restaurant.DoesNotExist):
            place.restaurant
        msg = "save() prohibited to prevent data loss due to unsaved related object 'place'."
        with self.assertRaisesMessage(ValueError, msg):
            Restaurant.objects.create(place=place, serves_hot_dogs=True, serves_pizza=False)
        # place should not cache restaurant
        with self.assertRaises(Restaurant.DoesNotExist):
            place.restaurant

    def test_reverse_relationship_cache_cascade(self):
        """