Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[1.0.X] Fixed #9546: GenericRelations inherited from base models no l…
…onger query using the wrong content type. Backport of r10373 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10374 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacobian committed Apr 3, 2009
1 parent 5971021 commit 9907495
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 3 deletions.
6 changes: 3 additions & 3 deletions django/contrib/contenttypes/generic.py
Expand Up @@ -193,17 +193,17 @@ def __get__(self, instance, instance_type=None):
rel_model = self.field.rel.to
superclass = rel_model._default_manager.__class__
RelatedManager = create_generic_related_manager(superclass)

qn = connection.ops.quote_name

manager = RelatedManager(
model = rel_model,
instance = instance,
symmetrical = (self.field.rel.symmetrical and instance.__class__ == rel_model),
join_table = qn(self.field.m2m_db_table()),
source_col_name = qn(self.field.m2m_column_name()),
target_col_name = qn(self.field.m2m_reverse_name()),
content_type = ContentType.objects.get_for_model(self.field.model),
content_type = ContentType.objects.get_for_model(instance),
content_type_field_name = self.field.content_type_field_name,
object_id_field_name = self.field.object_id_field_name
)
Expand Down
Empty file.
22 changes: 22 additions & 0 deletions tests/regressiontests/generic_relations_regress/models.py
@@ -0,0 +1,22 @@
from django.db import models
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType

class Link(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()

def __unicode__(self):
return "Link to %s id=%s" % (self.content_type, self.object_id)

class Place(models.Model):
name = models.CharField(max_length=100)
links = generic.GenericRelation(Link)

def __unicode__(self):
return "Place: %s" % self.name

class Restaurant(Place):
def __unicode__(self):
return "Restaurant: %s" % self.name
19 changes: 19 additions & 0 deletions tests/regressiontests/generic_relations_regress/tests.py
@@ -0,0 +1,19 @@
from django.test import TestCase
from django.contrib.contenttypes.models import ContentType
from models import Link, Place, Restaurant

class GenericRelationTests(TestCase):

def test_inherited_models_content_type(self):
"""
Test that GenericRelations on inherited classes use the correct content
type.
"""

p = Place.objects.create(name="South Park")
r = Restaurant.objects.create(name="Chubby's")
l1 = Link.objects.create(content_object=p)
l2 = Link.objects.create(content_object=r)
self.assertEqual(list(p.links.all()), [l1])
self.assertEqual(list(r.links.all()), [l2])

0 comments on commit 9907495

Please sign in to comment.