[Django] #24578: prepare_database_save breaks some OneToOneField's in 1.8

29 views
Skip to first unread message

Django

unread,
Apr 3, 2015, 3:49:02 PM4/3/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------+--------------------
Reporter: dxiao2003 | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------
With 1.8 the following doesn't work:

{{{
# 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.

Django

unread,
Apr 3, 2015, 6:14:43 PM4/3/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------------+-------------------------------------
Reporter: dxiao2003 | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by dxiao2003):

* 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>

Django

unread,
Apr 4, 2015, 8:11:54 PM4/4/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------------+-------------------------------------
Reporter: dxiao2003 | Owner: nobody

Type: Bug | Status: new
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timgraham):

* severity: Normal => Release blocker
* stage: Unreviewed => Accepted


Comment:

Bisected to dec93d89912965f94f9e942f0a89ca586fb91454.

--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:2>

Django

unread,
Apr 7, 2015, 8:15:58 AM4/7/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------------+-------------------------------------
Reporter: dxiao2003 | Owner: timgraham
Type: Bug | Status: assigned

Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timgraham):

* owner: nobody => timgraham
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:3>

Django

unread,
Apr 7, 2015, 9:24:18 AM4/7/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------------+-------------------------------------
Reporter: dxiao2003 | Owner: timgraham
Type: Bug | Status: assigned
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Release blocker | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by timgraham):

* has_patch: 0 => 1


Comment:

[https://github.com/django/django/pull/4462 PR]

--
Ticket URL: <https://code.djangoproject.com/ticket/24578#comment:4>

Django

unread,
Apr 9, 2015, 8:22:54 AM4/9/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------------+-------------------------------------
Reporter: dxiao2003 | Owner: timgraham
Type: Bug | Status: closed

Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Release blocker | Resolution: fixed

Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Tim Graham <timograham@…>):

* 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>

Django

unread,
Apr 9, 2015, 8:33:20 AM4/9/15
to django-...@googlegroups.com
#24578: prepare_database_save breaks some OneToOneField's in 1.8
-------------------------------------+-------------------------------------
Reporter: dxiao2003 | Owner: timgraham
Type: Bug | Status: closed
Component: Database layer | Version: 1.8
(models, ORM) |
Severity: Release blocker | Resolution: fixed
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

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>

Reply all
Reply to author
Forward
0 new messages