Commit 8edf8db5 authored by Tim Graham's avatar Tim Graham
Browse files

[1.9.x] Refs #25786 -- Added tests/release notes for set_FOO_order() crash...

[1.9.x] Refs #25786 -- Added tests/release notes for set_FOO_order() crash with order_with_respect_to referencing OneToOneField pk.

Forwardport of 6d9f061b from stable/1.8.x
The issue was fixed by 7bec480f.
parent 8957dfe4
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -42,3 +42,7 @@ Bugfixes

* Fixed a duplicate query regression in 1.8 on proxied model deletion
  (:ticket:`25685`).

* Fixed ``set_FOO_order()`` crash when the ``ForeignKey`` of a model with
  ``order_with_respect_to`` references a model with a ``OneToOneField``
  primary key (:ticket:`25786`).
+16 −0
Original line number Diff line number Diff line
@@ -42,3 +42,19 @@ class Post(models.Model):

    def __str__(self):
        return self.title


# order_with_respect_to points to a model with a OneToOneField primary key.
class Entity(models.Model):
    pass


class Dimension(models.Model):
    entity = models.OneToOneField('Entity', primary_key=True, on_delete=models.CASCADE)


class Component(models.Model):
    dimension = models.ForeignKey('Dimension', on_delete=models.CASCADE)

    class Meta:
        order_with_respect_to = 'dimension'
+11 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ from django.apps.registry import Apps
from django.db import models
from django.test import TestCase

from .models import Answer, Post, Question
from .models import Answer, Dimension, Entity, Post, Question


class OrderWithRespectToTests(TestCase):
@@ -118,3 +118,13 @@ class OrderWithRespectToTests2(TestCase):
                count += 1

        self.assertEqual(count, 1)


class TestOrderWithRespectToOneToOnePK(TestCase):
    def test_set_order(self):
        e = Entity.objects.create()
        d = Dimension.objects.create(entity=e)
        c1 = d.component_set.create()
        c2 = d.component_set.create()
        d.set_component_order([c1.id, c2.id])
        self.assertQuerysetEqual(d.component_set.all(), [c1.id, c2.id], attrgetter('pk'))