mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
[1.2.X] Fixed #11319 - Added lookup support for ForeignKey.to_field. Also reverted no-longer-needed model formsets workaround for lack of such support from r10756. Thanks Russell and Alex for review.
Backport of r15303 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15304 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -14,7 +14,7 @@ from django.utils.datastructures import SortedDict
|
||||
from models import (Annotation, Article, Author, Celebrity, Child, Cover, Detail,
|
||||
DumbCategory, ExtraInfo, Fan, Item, LeafA, LoopX, LoopZ, ManagedModel,
|
||||
Member, NamedCategory, Note, Number, Plaything, PointerA, Ranking, Related,
|
||||
Report, ReservedName, Tag, TvChef, Valid, X)
|
||||
Report, ReservedName, Tag, TvChef, Valid, X, Food, Eaten, Node)
|
||||
|
||||
|
||||
class BaseQuerysetTest(TestCase):
|
||||
@@ -1506,6 +1506,67 @@ class EscapingTests(TestCase):
|
||||
)
|
||||
|
||||
|
||||
class ToFieldTests(TestCase):
|
||||
def test_in_query(self):
|
||||
apple = Food.objects.create(name="apple")
|
||||
pear = Food.objects.create(name="pear")
|
||||
lunch = Eaten.objects.create(food=apple, meal="lunch")
|
||||
dinner = Eaten.objects.create(food=pear, meal="dinner")
|
||||
|
||||
self.assertEqual(
|
||||
set(Eaten.objects.filter(food__in=[apple, pear])),
|
||||
set([lunch, dinner]),
|
||||
)
|
||||
|
||||
def test_reverse_in(self):
|
||||
apple = Food.objects.create(name="apple")
|
||||
pear = Food.objects.create(name="pear")
|
||||
lunch_apple = Eaten.objects.create(food=apple, meal="lunch")
|
||||
lunch_pear = Eaten.objects.create(food=pear, meal="dinner")
|
||||
|
||||
self.assertEqual(
|
||||
set(Food.objects.filter(eaten__in=[lunch_apple, lunch_pear])),
|
||||
set([apple, pear])
|
||||
)
|
||||
|
||||
def test_single_object(self):
|
||||
apple = Food.objects.create(name="apple")
|
||||
lunch = Eaten.objects.create(food=apple, meal="lunch")
|
||||
dinner = Eaten.objects.create(food=apple, meal="dinner")
|
||||
|
||||
self.assertEqual(
|
||||
set(Eaten.objects.filter(food=apple)),
|
||||
set([lunch, dinner])
|
||||
)
|
||||
|
||||
def test_single_object_reverse(self):
|
||||
apple = Food.objects.create(name="apple")
|
||||
lunch = Eaten.objects.create(food=apple, meal="lunch")
|
||||
|
||||
self.assertEqual(
|
||||
set(Food.objects.filter(eaten=lunch)),
|
||||
set([apple])
|
||||
)
|
||||
|
||||
def test_recursive_fk(self):
|
||||
node1 = Node.objects.create(num=42)
|
||||
node2 = Node.objects.create(num=1, parent=node1)
|
||||
|
||||
self.assertEqual(
|
||||
list(Node.objects.filter(parent=node1)),
|
||||
[node2]
|
||||
)
|
||||
|
||||
def test_recursive_fk_reverse(self):
|
||||
node1 = Node.objects.create(num=42)
|
||||
node2 = Node.objects.create(num=1, parent=node1)
|
||||
|
||||
self.assertEqual(
|
||||
list(Node.objects.filter(node=node2)),
|
||||
[node1]
|
||||
)
|
||||
|
||||
|
||||
# In Python 2.6 beta releases, exceptions raised in __len__ are swallowed
|
||||
# (Python issue 1242657), so these cases return an empty list, rather than
|
||||
# raising an exception. Not a lot we can do about that, unfortunately, due to
|
||||
|
||||
Reference in New Issue
Block a user