1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

[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
This commit is contained in:
Justin Bronn 2010-01-22 19:43:14 +00:00
parent 46d8ae7c24
commit da954e876b
3 changed files with 43 additions and 10 deletions

View File

@ -131,7 +131,7 @@ class GenericRelation(RelatedField, Field):
return self.object_id_field_name return self.object_id_field_name
def m2m_reverse_name(self): 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): def contribute_to_class(self, cls, name):
super(GenericRelation, self).contribute_to_class(cls, name) super(GenericRelation, self).contribute_to_class(cls, name)

View File

@ -20,3 +20,23 @@ class Place(models.Model):
class Restaurant(Place): class Restaurant(Place):
def __unicode__(self): def __unicode__(self):
return "Restaurant: %s" % self.name 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

View File

@ -1,6 +1,6 @@
from django.test import TestCase from django.test import TestCase
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from models import Link, Place, Restaurant from models import Link, Place, Restaurant, Person, Address
class GenericRelationTests(TestCase): class GenericRelationTests(TestCase):
@ -17,3 +17,16 @@ class GenericRelationTests(TestCase):
self.assertEqual(list(p.links.all()), [l1]) self.assertEqual(list(p.links.all()), [l1])
self.assertEqual(list(r.links.all()), [l2]) 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)