diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2007-12-09 06:24:17 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2007-12-09 06:24:17 +0000 |
| commit | 3064a211bfcaac4ba0dda1ae21b10a5b766e3152 (patch) | |
| tree | c2a059862921dca43516ea8e880ceacdf76a2346 /tests | |
| parent | 3dce17ddc4a891856a0831f5f26716675d7a3bab (diff) | |
queryset-refactor: Allow specifying of specific relations to follow in
select_related(). Refs #5020.
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@6899 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/select_related/models.py | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/tests/modeltests/select_related/models.py b/tests/modeltests/select_related/models.py index 09877eb9b0..ed43fd5687 100644 --- a/tests/modeltests/select_related/models.py +++ b/tests/modeltests/select_related/models.py @@ -129,7 +129,7 @@ __test__ = {'API_TESTS':""" >>> pea.genus.family.order.klass.phylum.kingdom.domain <Domain: Eukaryota> -# Notice: one few query than above because of depth=1 +# Notice: one fewer queries than above because of depth=1 >>> len(db.connection.queries) 7 @@ -151,6 +151,38 @@ __test__ = {'API_TESTS':""" >>> s.id + 10 == s.a True -# Reset DEBUG to where we found it. +# The optional fields passed to select_related() control which related models +# we pull in. This allows for smaller queries and can act as an alternative +# (or, in addition to) the depth parameter. + +# In the next two cases, we explicitly say to select the 'genus' and +# 'genus.family' models, leading to the same number of queries as before. +>>> db.reset_queries() +>>> world = Species.objects.select_related('genus__family') +>>> [o.genus.family for o in world] +[<Family: Drosophilidae>, <Family: Hominidae>, <Family: Fabaceae>, <Family: Amanitacae>] +>>> len(db.connection.queries) +1 + +>>> db.reset_queries() +>>> world = Species.objects.filter(genus__name='Amanita').select_related('genus__family') +>>> [o.genus.family.order for o in world] +[<Order: Agaricales>] +>>> len(db.connection.queries) +2 + +>>> db.reset_queries() +>>> Species.objects.all().select_related('genus__family__order').order_by('id')[0:1].get().genus.family.order.name +u'Diptera' +>>> len(db.connection.queries) +1 + +# Specifying both "depth" and fields is an error. +>>> Species.objects.select_related('genus__family__order', depth=4) +Traceback (most recent call last): +... +TypeError: Cannot pass both "depth" and fields to select_related() + +# Reser DEBUG to where we found it. >>> settings.DEBUG = False """} |
