Fix #17876: Corrected an exception (regression) raised where select_realted and only is used on a proxy model. Thanks milosu and charettes.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17692 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Karen Tracey 2012-03-12 22:33:18 +00:00
parent db512b4d8c
commit 9d98b9eb4b
3 changed files with 10 additions and 2 deletions

View File

@ -1266,7 +1266,7 @@ def get_klass_info(klass, max_depth=0, cur_depth=0, requested=None,
return None return None
if only_load: if only_load:
load_fields = only_load.get(klass) load_fields = only_load.get(klass) or set()
# When we create the object, we will also be creating populating # When we create the object, we will also be creating populating
# all the parent classes, so traverse the parent classes looking # all the parent classes, so traverse the parent classes looking
# for fields that must be included on load. # for fields that must be included on load.

View File

@ -22,3 +22,7 @@ class Child(Primary):
class BigChild(Primary): class BigChild(Primary):
other = models.CharField(max_length=50) other = models.CharField(max_length=50)
class ChildProxy(Child):
class Meta:
proxy=True

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import
from django.db.models.query_utils import DeferredAttribute from django.db.models.query_utils import DeferredAttribute
from django.test import TestCase from django.test import TestCase
from .models import Secondary, Primary, Child, BigChild from .models import Secondary, Primary, Child, BigChild, ChildProxy
class DeferTests(TestCase): class DeferTests(TestCase):
@ -145,3 +145,7 @@ class DeferTests(TestCase):
obj.name = "bb" obj.name = "bb"
obj.save() obj.save()
def test_defer_proxy(self):
# using select related and only should not result in Exception
for obj in ChildProxy.objects.all().select_related().only('id'):
continue