Kaydet (Commit) c1584383 authored tarafından Justin Bronn's avatar Justin Bronn

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
üst 5ec44450
...@@ -129,7 +129,7 @@ class GenericRelation(RelatedField, Field): ...@@ -129,7 +129,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)
......
...@@ -20,3 +20,23 @@ class Place(models.Model): ...@@ -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
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): ...@@ -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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment