summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCarl Meyer <carl@oddbird.net>2011-01-26 19:27:46 +0000
committerCarl Meyer <carl@oddbird.net>2011-01-26 19:27:46 +0000
commit10b4d93f50f1c2e90387edea5738b2439987ca33 (patch)
treef6aeaf1218f8e4543dccabf08ecb9d102156f06f /tests
parent5b8c59305382e1453c8d73aa2282225964c78248 (diff)
[1.2.X] Fixed #15161 - Corrected handling of ManyToManyField with through table using to_field on its ForeignKeys. Thanks to adehnert for the report.
Backport of r15330 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15331 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/m2m_through_regress/models.py22
-rw-r--r--tests/regressiontests/m2m_through_regress/tests.py22
2 files changed, 43 insertions, 1 deletions
diff --git a/tests/regressiontests/m2m_through_regress/models.py b/tests/regressiontests/m2m_through_regress/models.py
index ec87985765..121ef22470 100644
--- a/tests/regressiontests/m2m_through_regress/models.py
+++ b/tests/regressiontests/m2m_through_regress/models.py
@@ -53,3 +53,25 @@ class Through(ThroughBase):
class B(models.Model):
b_text = models.CharField(max_length=20)
a_list = models.ManyToManyField(A, through=Through)
+
+
+# Using to_field on the through model
+class Car(models.Model):
+ make = models.CharField(max_length=20, unique=True)
+ drivers = models.ManyToManyField('Driver', through='CarDriver')
+
+ def __unicode__(self, ):
+ return self.make
+
+class Driver(models.Model):
+ name = models.CharField(max_length=20, unique=True)
+
+ def __unicode__(self, ):
+ return self.name
+
+class CarDriver(models.Model):
+ car = models.ForeignKey('Car', to_field='make')
+ driver = models.ForeignKey('Driver', to_field='name')
+
+ def __unicode__(self, ):
+ return u"pk=%s car=%s driver=%s" % (str(self.pk), self.car, self.driver)
diff --git a/tests/regressiontests/m2m_through_regress/tests.py b/tests/regressiontests/m2m_through_regress/tests.py
index 2eaf8861fc..a79651a4a1 100644
--- a/tests/regressiontests/m2m_through_regress/tests.py
+++ b/tests/regressiontests/m2m_through_regress/tests.py
@@ -7,7 +7,8 @@ from django.core import management
from django.contrib.auth.models import User
from django.test import TestCase
-from models import Person, Group, Membership, UserMembership
+from models import (Person, Group, Membership, UserMembership,
+ Car, Driver, CarDriver)
class M2MThroughTestCase(TestCase):
@@ -118,6 +119,25 @@ class M2MThroughTestCase(TestCase):
]
)
+
+class ToFieldThroughTests(TestCase):
+ def setUp(self):
+ self.car = Car.objects.create(make="Toyota")
+ self.driver = Driver.objects.create(name="Ryan Briscoe")
+ CarDriver.objects.create(car=self.car, driver=self.driver)
+
+ def test_to_field(self):
+ self.assertQuerysetEqual(
+ self.car.drivers.all(),
+ ["<Driver: Ryan Briscoe>"]
+ )
+
+ def test_to_field_reverse(self):
+ self.assertQuerysetEqual(
+ self.driver.car_set.all(),
+ ["<Car: Toyota>"]
+ )
+
class ThroughLoadDataTestCase(TestCase):
fixtures = ["m2m_through"]