Ticket #7666: 7666.patch
File 7666.patch, 2.5 KB (added by , 16 years ago) |
---|
-
django/db/models/fields/related.py
diff -r 1ee4136e46dc -r 4d88b8472b86 django/db/models/fields/related.py
a b 3 3 from django.db.models.fields import AutoField, Field, IntegerField, PositiveIntegerField, PositiveSmallIntegerField, get_ul_class, FieldDoesNotExist 4 4 from django.db.models.related import RelatedObject 5 5 from django.db.models.query_utils import QueryWrapper 6 from django.db.models.query import QuerySet 6 7 from django.utils.text import capfirst 7 8 from django.utils.translation import ugettext_lazy, string_concat, ungettext, ugettext as _ 8 9 from django.utils.functional import curry … … 236 237 params = {'%s__pk' % self.field.rel.field_name: val} 237 238 else: 238 239 params = {'%s__exact' % self.field.rel.field_name: val} 239 rel_obj = self.field.rel.to._default_manager.get(**params)240 rel_obj = QuerySet(self.field.rel.to).get(**params) 240 241 setattr(instance, cache_name, rel_obj) 241 242 return rel_obj 242 243 -
new file tests/regressiontests/reverse_single_related/models.py
diff -r 1ee4136e46dc -r 4d88b8472b86 tests/regressiontests/reverse_single_related/models.py
- + 1 """ 2 Regression tests for an object that cannot access a single related object due 3 to a restrictive default manager. 4 """ 5 6 from django.db import models 7 8 9 class SourceManager(models.Manager): 10 def get_query_set(self): 11 return super(SourceManager, self).get_query_set().filter(is_public=True) 12 13 class Source(models.Model): 14 is_public = models.BooleanField() 15 objects = SourceManager() 16 17 class Item(models.Model): 18 source = models.ForeignKey(Source) 19 20 21 __test__ = {'API_TESTS':""" 22 23 >>> public_source = Source.objects.create(is_public=True) 24 >>> public_item = Item.objects.create(source=public_source) 25 26 >>> private_source = Source.objects.create(is_public=False) 27 >>> private_item = Item.objects.create(source=private_source) 28 29 Only one source is available via all() due to the custom default manager. 30 31 >>> Source.objects.all() 32 [<Source: Source object>] 33 34 >>> public_item.source 35 <Source: Source object> 36 37 Make sure that an item can still access its related source even if the default 38 manager doesn't normally allow it. 39 40 >>> private_item.source 41 <Source: Source object> 42 43 """}