diff options
| author | Carl Meyer <carl@oddbird.net> | 2011-01-26 19:27:46 +0000 |
|---|---|---|
| committer | Carl Meyer <carl@oddbird.net> | 2011-01-26 19:27:46 +0000 |
| commit | 10b4d93f50f1c2e90387edea5738b2439987ca33 (patch) | |
| tree | f6aeaf1218f8e4543dccabf08ecb9d102156f06f /tests | |
| parent | 5b8c59305382e1453c8d73aa2282225964c78248 (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.py | 22 | ||||
| -rw-r--r-- | tests/regressiontests/m2m_through_regress/tests.py | 22 |
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"] |
