由于haystack尝试导入multiligualmodel时导入错误,无法使用django管理命令

时间:2011-12-20 15:06:25

标签: django import command django-haystack

我正在使用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

2 个答案:

答案 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)

除非haystack位于search_indexes.py,否则

INSTALLED_APPS不会被处理。问题在于一般导入MultilingualModel。要么它没有真正安装在您的环境中(尝试从vanilla python shell导入它),要么导入错误(例如,它实际上在另一个模块中)。

一旦你可以从python shell成功导入MultilingualModel,你就不会有任何问题。