django-fluent / django-fluent-contents

A widget engine to display various content on Django pages
http://django-fluent.org/
Apache License 2.0
149 stars 39 forks source link

ModuleNotFoundError w/ PlaceholderField #97

Closed b14s closed 5 years ago

b14s commented 5 years ago

I created a simple "Post" model with a few standard Django model fields and a django-fluent-content model PlaceholderField. It registers in the admin view, but when I attempt to instantiate the model I get "ModuleNotFoundError at /admin/content/post/add .... No module named 'django.contrib.admin.content_plugins'" and this traceback: `Environment:

Request Method: GET Request URL: http://localhost:8000/admin/content/post/add/

Django Version: 2.1 Python Version: 3.6.5 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', 'fluent_contents', 'django_wysiwyg', 'fluent_contents.plugins.text', 'fluent_contents.plugins.code', 'fluent_contents.plugins.gist', 'fluent_contents.plugins.googledocsviewer', 'fluent_contents.plugins.iframe', 'fluent_contents.plugins.markup', 'fluent_contents.plugins.rawhtml', 'content.apps.ContentConfig'] Installed Middleware: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

Traceback:

File "C:\Users***\project\env\lib\site-packages\django\core\handlers\exception.py" in inner

  1. response = get_response(request)

File "C:\Users***\project\env\lib\site-packages\django\core\handlers\base.py" in _get_response

  1. response = self.process_exception_by_middleware(e, request)

File "C:\Users***\project\env\lib\site-packages\django\core\handlers\base.py" in _get_response

  1. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\options.py" in wrapper

  1. return self.admin_site.admin_view(view)(*args, **kwargs)

File "C:\Users***\project\env\lib\site-packages\django\utils\decorators.py" in _wrapped_view

  1. response = view_func(request, *args, **kwargs)

File "C:\Users***\project\env\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func

  1. response = view_func(request, *args, **kwargs)

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\sites.py" in inner

  1. return view(request, *args, **kwargs)

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\options.py" in add_view

  1. return self.changeform_view(request, None, form_url, extra_context)

File "C:\Users***\project\env\lib\site-packages\django\utils\decorators.py" in _wrapper

  1. return bound_method(*args, **kwargs)

File "C:\Users***\project\env\lib\site-packages\django\utils\decorators.py" in _wrapped_view

  1. response = view_func(request, *args, **kwargs)

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\options.py" in changeform_view

  1. return self._changeform_view(request, object_id, form_url, extra_context)

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\options.py" in _changeform_view

  1. formsets, inline_instances = self._create_formsets(request, form.instance, change=False)

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\options.py" in _create_formsets

  1. for FormSet, inline in self.get_formsets_with_inlines(*get_formsets_args):

File "C:\Users***\project\env\lib\site-packages\django\contrib\admin\options.py" in get_formsets_with_inlines

  1. for inline in self.get_inline_instances(request, obj):

File "C:\Users***\project\env\lib\site-packages\fluent_contents\admin\placeholdereditor.py" in get_inline_instances

  1. inlinetypes = self.get_extra_inlines()

File "C:\Users***\project\env\lib\site-packages\fluent_contents\admin\placeholdereditor.py" in get_extra_inlines

  1. return [self.placeholder_inline] + get_content_item_inlines(plugins=self.get_all_allowed_plugins())

File "C:\Users***\project\env\lib\site-packages\fluent_contents\admin\placeholderfield.py" in get_all_allowed_plugins

  1. if field.plugins is None:

File "C:\Users***\project\env\lib\site-packages\fluent_contents\models\fields.py" in plugins

  1. return extensions.plugin_pool.get_plugins()

File "C:\Users***\project\env\lib\site-packages\fluent_contents\extensions\pluginpool.py" in get_plugins

  1. self._import_plugins()

File "C:\Users***\project\env\lib\site-packages\fluent_contents\extensions\pluginpool.py" in _import_plugins

  1. import_apps_submodule("content_plugins")

File "C:\Users***\project\env\lib\site-packages\fluent_utils\load.py" in import_apps_submodule

  1. if import_module_or_none('{0}.{1}'.format(app, submodule)) is not None:

File "C:\Users***\project\env\lib\site-packages\fluent_utils\load.py" in import_module_or_none

  1. return importlib.import_module(module_label)

File "C:\Users***\project\env\lib\importlib__init__.py" in import_module

  1. return _bootstrap._gcd_import(name[level:], package, level)

File "" in _gcd_import

File "" in _find_and_load

File "" in _find_and_load_unlocked

Exception Type: ModuleNotFoundError at /admin/content/post/add/ Exception Value: No module named 'django.contrib.admin.content_plugins' `

vdboor commented 5 years ago

It looks the path detection from https://github.com/django-fluent/django-fluent-utils/blob/master/fluent_utils/load.py#L86 failed on your OS.

I've released django-fluent-utils==2.0.1 which should fix this issue. I also noticed that you use Django 2.1 already. Not all apps are already fully tested on this new release. You may want to use Django<2.1 for now.