Commit 595c092a authored by Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss
Browse files

Fixed #9546: GenericRelations inherited from base models no longer query using...

Fixed #9546: GenericRelations inherited from base models no longer query using the wrong content type.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10373 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent c6c25adf
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -203,7 +203,7 @@ class ReverseGenericRelatedObjectsDescriptor(object):
            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
        )
+0 −0

Empty file added.

+22 −0
Original line number Diff line number Diff line
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
 No newline at end of file
+19 −0
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

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])
        
 No newline at end of file