From c4fdd859ecba0b8e6dac6eca06429e66925722bd Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Sun, 29 Sep 2013 13:02:25 -0400 Subject: [PATCH] Fixed #15786 -- Added a regression test for o2o excludes using F(). The issue was reported against 1.3.x but has been fixed since. --- tests/queries/models.py | 4 ++++ tests/queries/tests.py | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tests/queries/models.py b/tests/queries/models.py index aa72493855..afd2493f1d 100644 --- a/tests/queries/models.py +++ b/tests/queries/models.py @@ -390,6 +390,10 @@ class OneToOneCategory(models.Model): def __str__(self): return "one2one " + self.new_name +class CategoryRelationship(models.Model): + first = models.ForeignKey(SimpleCategory, related_name='first_rel') + second = models.ForeignKey(SimpleCategory, related_name='second_rel') + class NullableName(models.Model): name = models.CharField(max_length=20, null=True) diff --git a/tests/queries/tests.py b/tests/queries/tests.py index f3efc24bca..f0a5df587f 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -4,7 +4,6 @@ from collections import OrderedDict import datetime from operator import attrgetter import pickle -import sys import unittest from django.conf import settings @@ -26,7 +25,8 @@ from .models import ( OneToOneCategory, NullableName, ProxyCategory, SingleObject, RelatedObject, ModelA, ModelB, ModelC, ModelD, Responsibility, Job, JobResponsibilities, BaseA, FK1, Identifier, Program, Channel, Page, Paragraph, Chapter, Book, - MyObject, Order, OrderItem, SharedConnection, Task, Staff, StaffUser) + MyObject, Order, OrderItem, SharedConnection, Task, Staff, StaffUser, + CategoryRelationship) class BaseQuerysetTest(TestCase): def assertValueQuerysetEqual(self, qs, values): @@ -2452,6 +2452,21 @@ class ExcludeTest17600(TestCase): Order.objects.exclude(~Q(items__status=1)).distinct(), ['']) +class Exclude15786(TestCase): + """Regression test for #15786""" + def test_ticket15786(self): + c1 = SimpleCategory.objects.create(name='c1') + c2 = SimpleCategory.objects.create(name='c2') + o2o1 = OneToOneCategory.objects.create(category=c1) + o2o2 = OneToOneCategory.objects.create(category=c2) + rel = CategoryRelationship.objects.create(first=c1, second=c2) + self.assertEqual( + CategoryRelationship.objects.exclude( + first__onetoonecategory=F('second__onetoonecategory') + ).get(), rel + ) + + class NullInExcludeTest(TestCase): def setUp(self): NullableName.objects.create(name='i1')