| 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 | """} |