Author: jacob
Date: 2008-07-21 10:41:21 -0500 (Mon, 21 Jul 2008)
New Revision: 8017

Added:
   django/trunk/tests/regressiontests/reverse_single_related/
   django/trunk/tests/regressiontests/reverse_single_related/__init__.py
   django/trunk/tests/regressiontests/reverse_single_related/models.py
Modified:
   django/trunk/django/db/models/fields/related.py
Log:
FIxed #7666: use a bare queryset when accessing single related objects so that 
the related objects never become inaccessible.


Modified: django/trunk/django/db/models/fields/related.py
===================================================================
--- django/trunk/django/db/models/fields/related.py     2008-07-21 11:52:11 UTC 
(rev 8016)
+++ django/trunk/django/db/models/fields/related.py     2008-07-21 15:41:21 UTC 
(rev 8017)
@@ -2,6 +2,7 @@
 from django.db.models import signals, get_model
 from django.db.models.fields import AutoField, Field, IntegerField, 
PositiveIntegerField, PositiveSmallIntegerField, FieldDoesNotExist
 from django.db.models.related import RelatedObject
+from django.db.models.query import QuerySet
 from django.db.models.query_utils import QueryWrapper
 from django.utils.text import capfirst
 from django.utils.translation import ugettext_lazy, string_concat, ungettext, 
ugettext as _
@@ -236,7 +237,7 @@
                 params = {'%s__pk' % self.field.rel.field_name: val}
             else:
                 params = {'%s__exact' % self.field.rel.field_name: val}
-            rel_obj = self.field.rel.to._default_manager.get(**params)
+            rel_obj = QuerySet(self.field.rel.to).get(**params)
             setattr(instance, cache_name, rel_obj)
             return rel_obj
 

Added: django/trunk/tests/regressiontests/reverse_single_related/__init__.py
===================================================================

Added: django/trunk/tests/regressiontests/reverse_single_related/models.py
===================================================================
--- django/trunk/tests/regressiontests/reverse_single_related/models.py         
                (rev 0)
+++ django/trunk/tests/regressiontests/reverse_single_related/models.py 
2008-07-21 15:41:21 UTC (rev 8017)
@@ -0,0 +1,43 @@
+"""
+Regression tests for an object that cannot access a single related object due
+to a restrictive default manager.
+"""
+
+from django.db import models
+
+
+class SourceManager(models.Manager):
+    def get_query_set(self):
+        return super(SourceManager, 
self).get_query_set().filter(is_public=True)
+
+class Source(models.Model):
+    is_public = models.BooleanField()
+    objects = SourceManager()
+
+class Item(models.Model):
+    source = models.ForeignKey(Source)
+
+
+__test__ = {'API_TESTS':"""
+
+>>> public_source = Source.objects.create(is_public=True)
+>>> public_item = Item.objects.create(source=public_source)
+
+>>> private_source = Source.objects.create(is_public=False)
+>>> private_item = Item.objects.create(source=private_source)
+
+Only one source is available via all() due to the custom default manager.
+
+>>> Source.objects.all()
+[<Source: Source object>]
+
+>>> public_item.source
+<Source: Source object>
+
+Make sure that an item can still access its related source even if the default
+manager doesn't normally allow it.
+
+>>> private_item.source
+<Source: Source object>
+
+"""}


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to