Django django-haystack cannot import CategoryBase from django categories on first run

I have a custom category model extending CategoryBase in django categories.

When I put it in the haystack index and restart the server, the first time it complains that it cannot import name CategoryBase , which CategoryBase cannot be imported from categories.base , but if I refresh the page again, the site works fine and the search result returns the correct information . This is similar to the import order.

I looked at stacktrace and found an error coming from admin.autodiscover inside urls.py. Import looks like this: urls.py

 from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() from django.conf import settings from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.views.generic import TemplateView from django.contrib.sitemaps import GenericSitemap from galleries.models import Gallery from events.models import Event from django.contrib.auth.views import login, logout from dajaxice.core import dajaxice_autodiscover, dajaxice_config from core.models import StaticPageSitemap from articles.models import ArticleSitemap, IssueSitemap dajaxice_autodiscover() 

I tried moving auto-detection after import, as shown below:

 from django.conf.urls import patterns, include, url from django.contrib import admin from django.conf import settings from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.views.generic import TemplateView from django.contrib.sitemaps import GenericSitemap from galleries.models import Gallery from events.models import Event from django.contrib.auth.views import login, logout from dajaxice.core import dajaxice_autodiscover, dajaxice_config from core.models import StaticPageSitemap from articles.models import ArticleSitemap, IssueSitemap admin.autodiscover() dajaxice_autodiscover() 

While the error was removed at the first start, but the search does not return the result by category.

Here is the stack:

 Django Version: 1.5 Python Version: 2.7.3 Installed Applications: ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.comments', 'django.contrib.sites', 'django.contrib.markup', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sitemaps', 'django.contrib.sessions', 'django.contrib.admin', 'djcelery', 'filebrowser', 'compressor', 'south', 'taggit', 'categories', 'categories.editor', 'core', 'articles', 'newsletters', 'galleries', 'events', 'haystack', 'dajaxice', 'zencode', 'videos', 'directory', 'dps_payment', 'home', 'taggit_autosuggest', 'captcha', 'search', 'media_board'] Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware') Traceback: File "/srv/www/weddings/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 92. response = middleware_method(request) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/middleware/common.py" in process_request 69. if (not urlresolvers.is_valid_path(request.path_info, urlconf) and File "/srv/www/weddings/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in is_valid_path 551. resolve(path, urlconf) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve 440. return get_resolver(urlconf).resolve(path) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve 319. for pattern in self.url_patterns: File "/srv/www/weddings/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns 347. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module 342. self._urlconf_module = import_module(self.urlconf_name) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module 35. __import__(name) File "/srv/www/weddings/weddings_advanced/weddings/urls.py" in <module> 3. admin.autodiscover() File "/srv/www/weddings/local/lib/python2.7/site-packages/django/contrib/admin/__init__.py" in autodiscover 29. import_module('%s.admin' % app) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module 35. __import__(name) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/contrib/auth/admin.py" in <module> 172. admin.site.register(Group, GroupAdmin) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in register 98. validate(admin_class, model) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/contrib/admin/validation.py" in validate 22. models.get_apps() File "/srv/www/weddings/local/lib/python2.7/site-packages/django/db/models/loading.py" in get_apps 134. self._populate() File "/srv/www/weddings/local/lib/python2.7/site-packages/django/db/models/loading.py" in _populate 75. self.load_app(app_name) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/db/models/loading.py" in load_app 96. models = import_module('.models', app_name) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module 35. __import__(name) File "/srv/www/weddings/weddings_advanced/videos/models.py" in <module> 9. from categories.models import Category File "/srv/www/weddings/local/lib/python2.7/site-packages/categories/models.py" in <module> 13. from .base import CategoryBase File "/srv/www/weddings/local/lib/python2.7/site-packages/categories/base.py" in <module> 32. class CategoryBase(MPTTModel): File "/srv/www/weddings/local/lib/python2.7/site-packages/categories/base.py" in CategoryBase 41. verbose_name=_('parent')) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/translation/__init__.py" in ugettext 71. return _trans.ugettext(message) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py" in ugettext 276. return do_translate(message, 'ugettext') File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py" in do_translate 258. _default = translation(settings.LANGUAGE_CODE) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py" in translation 172. default_translation = _fetch(settings.LANGUAGE_CODE) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py" in _fetch 154. app = import_module(appname) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module 35. __import__(name) File "/srv/www/weddings/local/lib/python2.7/site-packages/haystack/__init__.py" in <module> 154. handle_registrations() File "/srv/www/weddings/local/lib/python2.7/site-packages/haystack/__init__.py" in handle_registrations 151. search_sites_conf = importlib.import_module(settings.HAYSTACK_SITECONF) File "/srv/www/weddings/local/lib/python2.7/site-packages/django/utils/importlib.py" in import_module 35. __import__(name) File "/srv/www/weddings/weddings_advanced/search/search_sites.py" in <module> 8. from directory.models import Listing, Category as DirectoryCategory File "/srv/www/weddings/weddings_advanced/directory/models.py" in <module> 21. from categories.base import CategoryBase Exception Type: ImportError at /directory/listing/new-listing-gift Exception Value: cannot import name CategoryBase 
0
source share
1 answer

Finally managed to fix it !!!!

The root cause was from categories.models import Category in the video application, which is another model of the application that imports the category, which extends the category, and it calls a circular link to fix it, in the models.py video application, go from direct import to lazy import as below:

 categories = models.ManyToManyField('categories.Category', null=True, blank=True) 

Update:

The above fix worked very short, and then I got other problems with cyclic import on other models, which was finally fixed: updating the haystack to version v2.1.0

0
source

Source: https://habr.com/ru/post/1346609/


All Articles