From c2e1ecb4b136016ab2996712aa0583fd91657bc9 Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Wed, 9 May 2012 20:33:31 +0300 Subject: Fix proxy model Query.remove_inherited_models() Fixed #18248 -- proxy models were added to included_inherited_models in sql.query.Query. The variable is meant to be used for multitable inheritance only. This mistake caused problems in situations where proxy model's query was reused. --- tests/regressiontests/queries/models.py | 4 ++++ tests/regressiontests/queries/tests.py | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index 89eefdf48e..07aa6db67b 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -10,6 +10,10 @@ from django.db import models class DumbCategory(models.Model): pass +class ProxyCategory(DumbCategory): + class Meta: + proxy = True + class NamedCategory(DumbCategory): name = models.CharField(max_length=10) diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py index 416970d493..8e86903724 100644 --- a/tests/regressiontests/queries/tests.py +++ b/tests/regressiontests/queries/tests.py @@ -19,7 +19,7 @@ from .models import (Annotation, Article, Author, Celebrity, Child, Cover, ManagedModel, Member, NamedCategory, Note, Number, Plaything, PointerA, Ranking, Related, Report, ReservedName, Tag, TvChef, Valid, X, Food, Eaten, Node, ObjectA, ObjectB, ObjectC, CategoryItem, SimpleCategory, - SpecialCategory, OneToOneCategory, NullableName) + SpecialCategory, OneToOneCategory, NullableName, ProxyCategory) class BaseQuerysetTest(TestCase): @@ -1952,3 +1952,15 @@ class EmptyStringsAsNullTest(TestCase): DumbCategory.objects.exclude(namedcategory__name__in=['nonexisting']), [self.nc.pk], attrgetter('pk') ) + +class ProxyQueryCleanupTest(TestCase): + def test_evaluated_proxy_count(self): + """ + Test that generating the query string doesn't alter the query's state + in irreversible ways. Refs #18248. + """ + ProxyCategory.objects.create() + qs = ProxyCategory.objects.all() + self.assertEqual(qs.count(), 1) + str(qs.query) + self.assertEqual(qs.count(), 1) -- cgit v1.3