#19607: prefetch_related bug
-------------------------------------+-------------------------------------
Reporter: av@… | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 1.4
(models, ORM) | Resolution: needsinfo
Severity: Normal | Triage Stage:
Keywords: prefetch | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by smyrman):
We have had several errors for this on http://dusken.no while using
prefetch related. We have had several bug reports regarding this. The
issues is hard to reproduce, but seems most likely to occur after objects
have recently been changed in the database (for our case, after someone
publishes another video).
On one specific view (http://dusken.no/tv/siste/) We have about 17-18 hits
for this error in a period of two months. The daily traffic would be
between 100 and 500 visitors for this view, and there are currently no
applied HTML caching.
Here is the code we suspect. There are several:
{{{
feature_episodes =
Episode.objects.filter(is_published=True).order_by('-priority').select_related('season',
'image').prefetch_related('category', 'season__series',
'season__series__category')[:5]
}}}
And also:
{{{
if category == 'siste':
episodes =
Episode.objects.filter(is_published=True).order_by('-priority',
'-public_from').select_related('season',
'image').prefetch_related('category', 'season__series__category')
{{{
Her is the stack trace:
{{{
Traceback (most recent call last):
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/srv/www/www.dusken.no/src/video/series/views.py", line 84, in
list
'feature_episodes': feature_episodes,
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/shortcuts/__init__.py", line 44, in render
return HttpResponse(loader.render_to_string(*args, **kwargs),
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/loader.py", line 176, in render_to_string
return t.render(context_instance)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/base.py", line 140, in render
return self._render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/base.py", line 823, in render
bit = self.render_node(node, context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/debug.py", line 74, in render_node
return node.render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/loader_tags.py", line 123, in render
return compiled_parent._render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/base.py", line 134, in _render
return self.nodelist.render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/base.py", line 823, in render
bit = self.render_node(node, context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/debug.py", line 74, in render_node
return node.render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/base.py", line 823, in render
bit = self.render_node(node, context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/debug.py", line 74, in render_node
return node.render(context)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/template/defaulttags.py", line 145, in render
len_values = len(values)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/db/models/query.py", line 89, in __len__
self._prefetch_related_objects()
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/db/models/query.py", line 570, in
_prefetch_related_objects
prefetch_related_objects(self._result_cache,
self._prefetch_related_lookups)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/db/models/query.py", line 1680, in
prefetch_related_objects
obj_list, additional_prl = prefetch_one_level(obj_list, prefetcher,
attr)
File "/srv/www/www.dusken.no/DUSKEN/lib/python2.6/site-
packages/django/db/models/query.py", line 1808, in prefetch_one_level
obj._prefetched_objects_cache[cache_name] = qs
AttributeError: 'Series' object has no attribute
'_prefetched_objects_cache'
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19607#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.