|
1 """ |
|
2 Make sure that the content type cache (see ContentTypeManager) works correctly. |
|
3 Lookups for a particular content type -- by model or by ID -- should hit the |
|
4 database only on the first lookup. |
|
5 |
|
6 First, let's make sure we're dealing with a blank slate (and that DEBUG is on so |
|
7 that queries get logged):: |
|
8 |
|
9 >>> from django.conf import settings |
|
10 >>> settings.DEBUG = True |
|
11 |
|
12 >>> from django.contrib.contenttypes.models import ContentType |
|
13 >>> ContentType.objects.clear_cache() |
|
14 |
|
15 >>> from django import db |
|
16 >>> db.reset_queries() |
|
17 |
|
18 At this point, a lookup for a ContentType should hit the DB:: |
|
19 |
|
20 >>> ContentType.objects.get_for_model(ContentType) |
|
21 <ContentType: content type> |
|
22 |
|
23 >>> len(db.connection.queries) |
|
24 1 |
|
25 |
|
26 A second hit, though, won't hit the DB, nor will a lookup by ID:: |
|
27 |
|
28 >>> ct = ContentType.objects.get_for_model(ContentType) |
|
29 >>> len(db.connection.queries) |
|
30 1 |
|
31 >>> ContentType.objects.get_for_id(ct.id) |
|
32 <ContentType: content type> |
|
33 >>> len(db.connection.queries) |
|
34 1 |
|
35 |
|
36 Once we clear the cache, another lookup will again hit the DB:: |
|
37 |
|
38 >>> ContentType.objects.clear_cache() |
|
39 >>> ContentType.objects.get_for_model(ContentType) |
|
40 <ContentType: content type> |
|
41 >>> len(db.connection.queries) |
|
42 2 |
|
43 |
|
44 Don't forget to reset DEBUG! |
|
45 |
|
46 >>> settings.DEBUG = False |
|
47 """ |