diff options
| author | Daniel Hillier <daniel.hillier@gmail.com> | 2016-12-14 01:06:54 +1100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-12-14 07:46:27 -0500 |
| commit | 7da37699e8d7124f5d0cfaba931772333c24ef83 (patch) | |
| tree | 416845e44257ba07ef9cc9c7cb48a787249dc2d5 /tests | |
| parent | 2e9fa516fde57fd58405481034a5a08b3746b257 (diff) | |
Fixed #27594 -- Fixed select_related() with reverse self-referential OneToOneField.
Fixed definition of `klass_info['from_parent']` so that two models aren't
considered from a parent class if the model classes are the same.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/select_related_onetoone/models.py | 9 | ||||
| -rw-r--r-- | tests/select_related_onetoone/tests.py | 12 |
2 files changed, 19 insertions, 2 deletions
diff --git a/tests/select_related_onetoone/models.py b/tests/select_related_onetoone/models.py index cb9221ea1c..76c45659af 100644 --- a/tests/select_related_onetoone/models.py +++ b/tests/select_related_onetoone/models.py @@ -102,3 +102,12 @@ class Child3(Child2): class Child4(Child1): value4 = models.IntegerField() + + +class LinkedList(models.Model): + name = models.CharField(max_length=50) + previous_item = models.OneToOneField( + 'self', models.CASCADE, + related_name='next_item', + blank=True, null=True, + ) diff --git a/tests/select_related_onetoone/tests.py b/tests/select_related_onetoone/tests.py index 3f45bba19c..a7d646e25d 100644 --- a/tests/select_related_onetoone/tests.py +++ b/tests/select_related_onetoone/tests.py @@ -4,8 +4,9 @@ from django.core.exceptions import FieldError from django.test import SimpleTestCase, TestCase from .models import ( - AdvancedUserStat, Child1, Child2, Child3, Child4, Image, Parent1, Parent2, - Product, StatDetails, User, UserProfile, UserStat, UserStatResult, + AdvancedUserStat, Child1, Child2, Child3, Child4, Image, LinkedList, + Parent1, Parent2, Product, StatDetails, User, UserProfile, UserStat, + UserStatResult, ) @@ -207,6 +208,13 @@ class ReverseSelectRelatedTestCase(TestCase): self.assertEqual(p.child1.name1, 'n1') self.assertEqual(p.child1.child4.name1, 'n1') + def test_self_relation(self): + item1 = LinkedList.objects.create(name='item1') + LinkedList.objects.create(name='item2', previous_item=item1) + with self.assertNumQueries(1): + item1_db = LinkedList.objects.select_related('next_item').get(name='item1') + self.assertEqual(item1_db.next_item.name, 'item2') + class ReverseSelectRelatedValidationTests(SimpleTestCase): """ |
