{{{
# models.py
from django.db import models
class A(models.Model):
pass
class Aprime(models.Model):
original = models.OneToOneField(A, primary_key=True)
class B(models.Model):
aprime = models.ForeignKey(Aprime)
# tests.py
from django.test import TestCase
from models import *
class TestTestCase(TestCase):
def test_ref(self):
a_one = A.objects.create()
a_two = A.objects.create()
self.assertNotEqual(a_one, a_two)
aprime = Aprime.objects.create(original=a_one)
aprime2 = Aprime.objects.create(original=a_two)
b = B.objects.create(aprime=aprime)
self.assertEqual(b.aprime, aprime)
B.objects.update(aprime=aprime2)
b = B.objects.get(pk=b.id)
self.assertEqual(b.aprime, aprime2)
}}}
This throws a `InterfaceError: Error binding parameter 0 - probably
unsupported type.` when calling `B.objects.update(aprime=aprime2)`.
The bug disappears when overriding `prepare_database_save` to just return
`self.pk` instead of `getattr(self, field.rel.field_name)`. (This was the
behavior as of 1.7 and the bug does not occur there.)
Not sure why `prepare_database_save` was modified but this bug actually
affects a project of mine so would suggest rolling back to the 1.7
version.
--
Ticket URL: <https://code.djangoproject.com/ticket/24578>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* component: Uncategorized => Database layer (models, ORM)
* needs_better_patch: => 0
* type: Uncategorized => Bug
* needs_tests: => 0
* needs_docs: => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:1>
* severity: Normal => Release blocker
* stage: Unreviewed => Accepted
Comment:
Bisected to dec93d89912965f94f9e942f0a89ca586fb91454.
--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:2>
* owner: nobody => timgraham
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:3>
* has_patch: 0 => 1
Comment:
[https://github.com/django/django/pull/4462 PR]
--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:4>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"a10b4c010ab2cdaa6ba8bfaec3e3540299ea77be" a10b4c0]:
{{{
#!CommitTicketReference repository=""
revision="a10b4c010ab2cdaa6ba8bfaec3e3540299ea77be"
Fixed #24578 -- Fixed crash with QuerySet.update() on FK to O2O fields.
Thanks Anssi Kääriäinen for review.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:5>
Comment (by Tim Graham <timograham@…>):
In [changeset:"b1dc128a03fc586b42a0d9f26dfe0bc7655ea6e8" b1dc128a]:
{{{
#!CommitTicketReference repository=""
revision="b1dc128a03fc586b42a0d9f26dfe0bc7655ea6e8"
[1.8.x] Fixed #24578 -- Fixed crash with QuerySet.update() on FK to O2O
fields.
Thanks Anssi Kääriäinen for review.
Backport of 10b4c010ab2cdaa6ba8bfaec3e3540299ea77be from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:6>