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

Fixed #12664 -- Fixed `GenericRelation.m2m_reverse_name` to return the correct pk column name.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@12276 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 5ec44450
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -129,7 +129,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)