どこで発生しているかを確認したい場合は、インポートdjango.db.connection
して検査してくださいqueries
>>> from django.db import connection
>>> from django.core.paginator import Paginator
>>> queryset = Entry.objects.all()
ページネーターを作成して、クエリが発生するかどうかを確認しましょう。
>>> paginator = Paginator(queryset, 10)
>>> print connection.queries
[]
まだありません。
>>> page = paginator.page(4)
>>> page
<Page 4 of 788>
>>> print connection.queries
[{'time': '0.014', 'sql': 'SELECT COUNT(*) FROM `entry`'}]
ページを作成すると、クエリセットに含まれるエントリの数をカウントするためのクエリが1つ生成されます。エントリはまだフェッチされていません。
ページのオブジェクトを変数'objects'に割り当てます。
>>> objects = page.object_list
>>> print connection.queries
[{'time': '0.014', 'sql': 'SELECT COUNT(*) FROM `entry`'}]
これにより、エントリがフェッチされることはありません。
HttpResponse
オブジェクトリストからを生成します
>>> response = HttpResponse(page.object_list)
>>> print connection.queries
[{'time': '0.014', 'sql': 'SELECT COUNT(*) FROM `entry`'}, {'time': '0.011', 'sql': 'SELECT `entry`.`id`, <snip> FROM `entry` LIMIT 10 OFFSET 30'}]
最後に、エントリがフェッチされました。