From a2aea4521d5e3cf8c76ef17e6edafee1c87bbf0a Mon Sep 17 00:00:00 2001 From: Morgan Wahl Date: Tue, 5 Dec 2017 16:08:50 -0500 Subject: [PATCH] [1.11.x] Refs #28856 -- Fixed caching of a GenericForeignKey pointing to a model that uses more than one level of MTI. --- docs/releases/1.11.9.txt | 3 +++ tests/generic_relations_regress/models.py | 5 +++++ tests/generic_relations_regress/tests.py | 12 +++++++++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/releases/1.11.9.txt b/docs/releases/1.11.9.txt index fa480d44bca..b8021ce70d7 100644 --- a/docs/releases/1.11.9.txt +++ b/docs/releases/1.11.9.txt @@ -17,3 +17,6 @@ Bugfixes * Fixed incorrect foreign key constraint name for models with quoted ``db_table`` (:ticket:`28876`). +* Fixed a regression in caching of a ``GenericForeignKey`` when the referenced + model instance uses more than one level of multi-table inheritance + (:ticket:`28856`). diff --git a/tests/generic_relations_regress/models.py b/tests/generic_relations_regress/models.py index 2011ea14b9a..c9572eb9618 100644 --- a/tests/generic_relations_regress/models.py +++ b/tests/generic_relations_regress/models.py @@ -38,6 +38,11 @@ class Restaurant(Place): return "Restaurant: %s" % self.name +class Cafe(Restaurant): + def __str__(self): + return "Cafe: %s" % self.name + + class Address(models.Model): street = models.CharField(max_length=80) city = models.CharField(max_length=50) diff --git a/tests/generic_relations_regress/tests.py b/tests/generic_relations_regress/tests.py index cfac484053a..f052cb61dfb 100644 --- a/tests/generic_relations_regress/tests.py +++ b/tests/generic_relations_regress/tests.py @@ -5,9 +5,10 @@ from django.forms.models import modelform_factory from django.test import TestCase, skipIfDBFeature from .models import ( - A, Address, B, Board, C, CharLink, Company, Contact, Content, D, Developer, - Guild, HasLinkThing, Link, Node, Note, OddRelation1, OddRelation2, - Organization, Person, Place, Related, Restaurant, Tag, Team, TextLink, + A, Address, B, Board, C, Cafe, CharLink, Company, Contact, Content, D, + Developer, Guild, HasLinkThing, Link, Node, Note, OddRelation1, + OddRelation2, Organization, Person, Place, Related, Restaurant, Tag, Team, + TextLink, ) @@ -54,6 +55,11 @@ class GenericRelationTests(TestCase): charlink = CharLink.objects.latest('pk') self.assertIs(charlink.content_object, charlink.content_object) + cafe = Cafe.objects.create() + CharLink.objects.create(content_object=cafe) + charlink = CharLink.objects.latest('pk') + self.assertIs(charlink.content_object, charlink.content_object) + def test_q_object_or(self): """ SQL query parameters for generic relations are properly