diff options
Diffstat (limited to 'tests/regressiontests/reverse_single_related/models.py')
| -rw-r--r-- | tests/regressiontests/reverse_single_related/models.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/regressiontests/reverse_single_related/models.py b/tests/regressiontests/reverse_single_related/models.py new file mode 100644 index 0000000000..b2b75392aa --- /dev/null +++ b/tests/regressiontests/reverse_single_related/models.py @@ -0,0 +1,54 @@ +""" +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> + +# If the manager is marked "use_for_related_fields", it'll get used instead +# of the "bare" queryset. Usually you'd define this as a property on the class, +# but this approximates that in a way that's easier in tests. + +>>> Source.objects.use_for_related_fields = True +>>> private_item = Item.objects.get(pk=private_item.pk) +>>> private_item.source +Traceback (most recent call last): + ... +DoesNotExist: Source matching query does not exist. + +"""} |
