Commit a10b4c01 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #24578 -- Fixed crash with QuerySet.update() on FK to O2O fields.

Thanks Anssi Kääriäinen for review.
parent 20a98d86
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -878,7 +878,7 @@ class Model(six.with_metaclass(ModelBase)):
    def prepare_database_save(self, field):
        if self.pk is None:
            raise ValueError("Unsaved model instance %r cannot be used in an ORM query." % self)
        return getattr(self, field.remote_field.field_name)
        return getattr(self, field.remote_field.get_related_field().attname)

    def clean(self):
        """
+3 −0
Original line number Diff line number Diff line
@@ -28,3 +28,6 @@ Bugfixes

* Fixed a migration crash when altering
  :class:`~django.db.models.ManyToManyField`\s (:ticket:`24513`).

* Fixed a crash with ``QuerySet.update()`` on foreign keys to one-to-one fields
  (:ticket:`24578`).
+11 −0
Original line number Diff line number Diff line
@@ -468,3 +468,14 @@ class OneToOneTests(TestCase):
        # refs #21563
        self.assertFalse(hasattr(Director(), 'director'))
        self.assertFalse(hasattr(School(), 'school'))

    def test_update_one_to_one_pk(self):
        p1 = Place.objects.create()
        p2 = Place.objects.create()
        r1 = Restaurant.objects.create(place=p1)
        r2 = Restaurant.objects.create(place=p2)
        w = Waiter.objects.create(restaurant=r1)

        Waiter.objects.update(restaurant=r2)
        w.refresh_from_db()
        self.assertEqual(w.restaurant, r2)