diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-10-08 08:38:33 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-10-08 08:38:33 +0000 |
| commit | 44f228fd61e5f45dbdfa465291319dfd5dd66393 (patch) | |
| tree | 011d815e54bd9268b4af22a415175a507de65ec2 /django/db | |
| parent | 268ef594ace36e82043b2f9b6eaa18531cd24b2f (diff) | |
Fixed #6748 -- When printing the repr() of querysets, don't load or display
more than 20 objects.
This means that accidentally executing HugeStoryArchive.objects.all() at the
interactive prompt (or in the debug template) won't try to load all 4,233,010
stories into memory and print them out. That would previously cause resource
starvation and other "interesting" crashes.
If you really, really want the previous behaviour (e.g. in a doctest that
prints more than 20 items), display "list(qs)" instead of just "qs".
git-svn-id: http://code.djangoproject.com/svn/django/trunk@9202 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db')
| -rw-r--r-- | django/db/models/query.py | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py index b08f3acd14..5b9f504d2f 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -15,6 +15,9 @@ from django.utils.datastructures import SortedDict CHUNK_SIZE = 100 ITER_CHUNK_SIZE = CHUNK_SIZE +# The maximum number of items to display in a QuerySet.__repr__ +REPR_OUTPUT_SIZE = 20 + # Pull into this namespace for backwards compatibility. EmptyResultSet = sql.EmptyResultSet @@ -141,7 +144,10 @@ class QuerySet(object): return obj_dict def __repr__(self): - return repr(list(self)) + data = list(self[:REPR_OUTPUT_SIZE + 1]) + if len(data) > REPR_OUTPUT_SIZE: + data[-1] = "...(remaining elements truncated)..." + return repr(data) def __len__(self): # Since __len__ is called quite frequently (for example, as part of |
