Fixed #15786 -- Added a regression test for o2o excludes using F().

The issue was reported against 1.3.x but has been fixed since.
This commit is contained in:
Simon Charette 2013-09-29 13:02:25 -04:00
parent b0e06c3662
commit c4fdd859ec
2 changed files with 21 additions and 2 deletions

View File

@ -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)

View File

@ -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(),
['<Order: 1>'])
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')