Hello,
I tried to use djangocms-blog on my DjangoCMS 3 website and it works great. But when I add a few blog posts, enable aldryn_search and rebuild the haystack index, I get the following error:
ERROR:root:Error updating cms using default
Traceback (most recent call last):
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 189, in handle_label
self.update_backend(label, using)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 234, in update_backend
do_update(backend, index, qs, start, end, total, self.verbosity)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
backend.update(index, current_qs)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/backends/solr_backend.py", line 54, in update
docs.append(index.full_prepare(obj))
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/indexes.py", line 207, in full_prepare
self.prepared_data = self.prepare(obj)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/base.py", line 42, in prepare
self.prepared_data['text'] = self.get_search_data(obj, current_language, request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/search_indexes.py", line 52, in get_search_data
plugin_text_content = self.get_plugin_search_text(base_plugin, request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/search_indexes.py", line 68, in get_plugin_search_text
plugin_content_bits = get_plugin_index_data(base_plugin, request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/helpers.py", line 41, in get_plugin_index_data
plugin_contents = instance.render_plugin(context=RequestContext(request))
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/cms/models/pluginmodel.py", line 172, in render_plugin
context = plugin.render(context, instance, placeholder_slot)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/djangocms_blog/cms_plugins.py", line 27, in render
context['posts_list'] = instance.get_posts(context['request'])
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/djangocms_blog/models.py", line 254, in get_posts
posts = self.post_queryset(request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/djangocms_blog/models.py", line 230, in post_queryset
if not request.toolbar or not request.toolbar.edit_mode:
AttributeError: 'WSGIRequest' object has no attribute 'toolbar'
Traceback (most recent call last):
File "./manage.py", line 12, in
execute_from_command_line(sys.argv)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/init.py", line 385, in execute_from_command_line
utility.execute()
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/init.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(_args, *_options.dict)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(_args, *_options)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/rebuild_index.py", line 16, in handle
call_command('update_index', *_options)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/init.py", line 115, in call_command
return klass.execute(_args, *_defaults)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
output = self.handle(_args, *_options)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 184, in handle
return super(Command, self).handle(_items, *_options)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/django/core/management/base.py", line 503, in handle
label_output = self.handle_label(label, *_options)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 189, in handle_label
self.update_backend(label, using)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 234, in update_backend
do_update(backend, index, qs, start, end, total, self.verbosity)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
backend.update(index, current_qs)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/backends/solr_backend.py", line 54, in update
docs.append(index.full_prepare(obj))
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/haystack/indexes.py", line 207, in full_prepare
self.prepared_data = self.prepare(obj)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/base.py", line 42, in prepare
self.prepared_data['text'] = self.get_search_data(obj, current_language, request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/search_indexes.py", line 52, in get_search_data
plugin_text_content = self.get_plugin_search_text(base_plugin, request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/search_indexes.py", line 68, in get_plugin_search_text
plugin_content_bits = get_plugin_index_data(base_plugin, request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/aldryn_search/helpers.py", line 41, in get_plugin_index_data
plugin_contents = instance.render_plugin(context=RequestContext(request))
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/cms/models/pluginmodel.py", line 172, in render_plugin
context = plugin.render(context, instance, placeholder_slot)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/djangocms_blog/cms_plugins.py", line 27, in render
context['posts_list'] = instance.get_posts(context['request'])
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/djangocms_blog/models.py", line 254, in get_posts
posts = self.post_queryset(request)
File "/home/eugene/.virtualenvs/expresso/local/lib/python2.7/site-packages/djangocms_blog/models.py", line 230, in post_queryset
if not request.toolbar or not request.toolbar.edit_mode:
AttributeError: 'WSGIRequest' object has no attribute 'toolbar'
I fixed the issue by editing the line 230 in models.py by adding the "hasattr" test, like this:
@python_2_unicode_compatible
class BasePostPlugin(CMSPlugin):
class Meta:
abstract = True
def post_queryset(self, request):
language = get_language()
posts = Post._default_manager.active_translations(language_code=language)
if not hasattr(request, 'toolbar') or not request.toolbar or not request.toolbar.edit_mode:
posts = posts.published()
return posts
def __str__(self):
return unicode(self.latest_posts)
For your information, here is a list of packages I use:
Django==1.7.1
aldryn-search==0.2.4
django-cms==3.1.0.dev1
djangocms-blog==0.3.0.c1
...
Do you think it is the best way to go? Could you integrate this fix in your code? I think that DjangoCMS 3, djangocms-blog and aldryn_search is a great combination!