1
0
mirror of https://github.com/django/django.git synced 2025-04-14 20:34:36 +00:00

[1.11.x] Fixed #28418 -- Fixed queryset crash when using a GenericRelation to a proxy model.

Backport of f9e5f9ae9f83c7ddf5e5d3c369b6bf54a9b80ab5 from master
This commit is contained in:
Rachel Tobin 2017-07-21 15:21:13 -07:00 committed by Tim Graham
parent b0304428d6
commit 801b6fb32e
5 changed files with 16 additions and 1 deletions

View File

@ -633,6 +633,7 @@ answer newbie questions, and generally made Django that much better:
pradeep.gowda@gmail.com
Preston Holmes <preston@ptone.com>
Preston Timmons <prestontimmons@gmail.com>
Rachel Tobin <rmtobin@me.com>
Rachel Willmer <http://www.willmer.com/kb/>
Radek Švarz <http://www.svarz.cz/translate/>
Rajesh Dhawan <rajesh.dhawan@gmail.com>

View File

@ -368,7 +368,7 @@ class GenericRelation(ForeignObject):
# generating a join to the parent model, then generating joins to the
# child models.
path = []
opts = self.remote_field.model._meta
opts = self.remote_field.model._meta.concrete_model._meta
parent_opts = opts.get_field(self.object_id_field_name).model._meta
target = parent_opts.pk
path.append(PathInfo(self.model._meta, parent_opts, (target,), self.remote_field, True, False))

View File

@ -35,3 +35,6 @@ Bugfixes
``checkbox_name``, ``checkbox_id``, ``is_initial``, ``input_text``,
``initial_text``, and ``clear_checkbox_label`` are now attributes of
``widget`` rather than appearing in the top-level context.
* Fixed queryset crash when using a ``GenericRelation`` to a proxy model
(:ticket:`28418`).

View File

@ -21,10 +21,16 @@ class Link(models.Model):
return "Link to %s id=%s" % (self.content_type, self.object_id)
class LinkProxy(Link):
class Meta:
proxy = True
@python_2_unicode_compatible
class Place(models.Model):
name = models.CharField(max_length=100)
links = GenericRelation(Link)
link_proxy = GenericRelation(LinkProxy)
def __str__(self):
return "Place: %s" % self.name

View File

@ -244,3 +244,8 @@ class GenericRelationTests(TestCase):
def test_ticket_22982(self):
place = Place.objects.create(name='My Place')
self.assertIn('GenericRelatedObjectManager', str(place.links))
def test_filter_on_related_proxy_model(self):
place = Place.objects.create()
Link.objects.create(content_object=place)
self.assertEqual(Place.objects.get(link_proxy__object_id=place.id), place)