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