Commit da954e87 authored by Justin Bronn's avatar Justin Bronn
Browse files

[1.1.X] Fixed #12664 -- Fixed `GenericRelation.m2m_reverse_name` to return the...

[1.1.X] Fixed #12664 -- Fixed `GenericRelation.m2m_reverse_name` to return the correct pk column name.

Backport of r12276 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12277 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 46d8ae7c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ class GenericRelation(RelatedField, Field):
        return self.object_id_field_name

    def m2m_reverse_name(self):
        return self.model._meta.pk.column
        return self.rel.to._meta.pk.column

    def contribute_to_class(self, cls, name):
        super(GenericRelation, self).contribute_to_class(cls, name)
+24 −4
Original line number Diff line number Diff line
@@ -20,3 +20,23 @@ class Place(models.Model):
class Restaurant(Place):
    def __unicode__(self):
        return "Restaurant: %s" % self.name

class Address(models.Model):
    street = models.CharField(max_length=80)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=2)
    zipcode = models.CharField(max_length=5)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()

    def __unicode__(self):
        return '%s %s, %s %s' % (self.street, self.city, self.state, self.zipcode)

class Person(models.Model):
    account = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=128)
    addresses = generic.GenericRelation(Address)

    def __unicode__(self):
        return self.name
+18 −5
Original line number Diff line number Diff line
from django.test import TestCase
from django.contrib.contenttypes.models import ContentType
from models import Link, Place, Restaurant
from models import Link, Place, Restaurant, Person, Address

class GenericRelationTests(TestCase):

@@ -17,3 +17,16 @@ class GenericRelationTests(TestCase):
        self.assertEqual(list(p.links.all()), [l1])
        self.assertEqual(list(r.links.all()), [l2])

    def test_reverse_relation_pk(self):
        """
        Test that the correct column name is used for the primary key on the
        originating model of a query.  See #12664.
        """
        p = Person.objects.create(account=23, name='Chef')
        a = Address.objects.create(street='123 Anywhere Place',
                                   city='Conifer', state='CO',
                                   zipcode='80433', content_object=p)

        qs = Person.objects.filter(addresses__zipcode='80433')
        self.assertEqual(1, qs.count())
        self.assertEqual('Chef', qs[0].name)