diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -225,6 +225,7 @@
             db = router.db_for_read(self.related.model, instance=instance)
             rel_obj = self.related.model._base_manager.using(db).get(**params)
             setattr(instance, self.cache_name, rel_obj)
+            setattr(rel_obj, self.related.field.name, instance)
             return rel_obj
 
     def __set__(self, instance, value):
diff --git a/tests/regressiontests/one_to_one_regress/models.py b/tests/regressiontests/one_to_one_regress/models.py
--- a/tests/regressiontests/one_to_one_regress/models.py
+++ b/tests/regressiontests/one_to_one_regress/models.py
@@ -26,6 +26,10 @@
     place = models.OneToOneField(Place, null=True)
     serves_cocktails = models.BooleanField()
 
+    def unlink_place(self):
+        self.place = None
+        self.save()
+
 class Favorites(models.Model):
     name = models.CharField(max_length = 50)
     restaurants = models.ManyToManyField(Restaurant)
diff --git a/tests/regressiontests/one_to_one_regress/tests.py b/tests/regressiontests/one_to_one_regress/tests.py
--- a/tests/regressiontests/one_to_one_regress/tests.py
+++ b/tests/regressiontests/one_to_one_regress/tests.py
@@ -128,3 +128,14 @@
                 Target.objects.exclude(pointer2=None),
                 []
         )
+
+    def test_not_delete_parent(self):
+        """Regression test for #14043
+
+        Deleting a parent object should not delete the (ex) child after breaking
+        their link.
+        """
+        bar = UndergroundBar.objects.create(place=self.p1, serves_cocktails=False)
+        self.p1.undergroundbar.unlink_place()
+        self.p1.delete()
+        self.assertEqual(UndergroundBar.objects.count(), 1)
