我正在使用django-haystack在我的网站上搜索。 我也在使用django multilingual model作为I18n。 我在search_indexes.py
中导入MultilingualModel只要我在INSTALLED_APPS中没有haystack,我就可以运行所有管理命令。
当haystack在INSTALLED_APPS中并尝试运行syncdb或migrate(以及其他几个管理命令)时,我总是得到:
django.core.exceptions.ImproperlyConfigured: ImportError haystack: cannot import name MultilingualModel
答案 0 :(得分:8)
这可能与haystack.autodiscover()
中的黑客行为有关。此行为记录在此处:http://docs.haystacksearch.org/dev/debugging.html#import-errors-on-start-up-mentioning-handle-registrations此票证中有一个长时间的讨论:https://github.com/toastdriven/django-haystack/issues/84
如果将haystack.autodiscover()
移动到您的urls.py
中,有时可以解决此问题。在运行syncdb或者迁移时设置HAYSTACK_ENABLE_REGISTRATIONS = False
已在我的settings.py
中使用此代码段为我解决了这个问题:
# FIXME: This is a complete hack to get around circular imports in
# django-haystack and other apps such as django-endless-pagination
SKIP_COMMANDS = ['syncdb', 'migrate', 'schemamigration', 'datamigration']
if any([command in sys.argv for command in SKIP_COMMANDS]):
HAYSTACK_ENABLE_REGISTRATIONS = False
答案 1 :(得分:0)
search_indexes.py
,否则 INSTALLED_APPS
不会被处理。问题在于一般导入MultilingualModel
。要么它没有真正安装在您的环境中(尝试从vanilla python shell导入它),要么导入错误(例如,它实际上在另一个模块中)。
一旦你可以从python shell成功导入MultilingualModel
,你就不会有任何问题。