From 9d98b9eb4bee1c9d69694f37dc618c36ecfecb8d Mon Sep 17 00:00:00 2001 From: Karen Tracey Date: Mon, 12 Mar 2012 22:33:18 +0000 Subject: [PATCH] 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 --- django/db/models/query.py | 2 +- tests/modeltests/defer/models.py | 4 ++++ tests/modeltests/defer/tests.py | 6 +++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/django/db/models/query.py b/django/db/models/query.py index 08fda78332..44acadf037 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -1266,7 +1266,7 @@ def get_klass_info(klass, max_depth=0, cur_depth=0, requested=None, return None 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 # all the parent classes, so traverse the parent classes looking # for fields that must be included on load. diff --git a/tests/modeltests/defer/models.py b/tests/modeltests/defer/models.py index 4fddd39d26..c64becf972 100644 --- a/tests/modeltests/defer/models.py +++ b/tests/modeltests/defer/models.py @@ -22,3 +22,7 @@ class Child(Primary): class BigChild(Primary): other = models.CharField(max_length=50) + +class ChildProxy(Child): + class Meta: + proxy=True diff --git a/tests/modeltests/defer/tests.py b/tests/modeltests/defer/tests.py index 542162c3b2..88aac0c9e5 100644 --- a/tests/modeltests/defer/tests.py +++ b/tests/modeltests/defer/tests.py @@ -3,7 +3,7 @@ from __future__ import absolute_import from django.db.models.query_utils import DeferredAttribute from django.test import TestCase -from .models import Secondary, Primary, Child, BigChild +from .models import Secondary, Primary, Child, BigChild, ChildProxy class DeferTests(TestCase): @@ -145,3 +145,7 @@ class DeferTests(TestCase): obj.name = "bb" 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