在导入应用程序的设置中调用的信号:失败

时间:2016-04-12 11:45:26

标签: django django-haystack

我正在使用Python 3.4.3Django 1.9.2django-haystack 2.4.1

我只提出基本代码来解释。

以下是我的设置:

INSTALLED_APPS = (
    ...,
    contacts.documents,
    haystack,
    contacts.search,
)

HAYSTACK_SIGNAL_PROCESSOR = 'contacts.search.signals.MyRealtimeProcessor'

这是我的文件:contacts.search.signals.py:

from contacts.documents.models import Document

class MyRealtimeProcessor(RealtimeSignalProcessor):

    def handle_save(self, sender, instance, **kwargs):
        …
        d_index = self.connections[using].get_unified_index()\
                                                 .get_index(Document)

使用此代码,我获得错误

 raise AppRegistryNotReady("Apps aren't loaded yet.")

因为我的信号中有from contacts.documents.models import Document

我该如何纠正?

1 个答案:

答案 0 :(得分:0)

在Django加载完所有应用之前,您无法加载模型。我不完全清楚为什么在加载应用之前导入了signals.py文件,但是你可以通过将这个逻辑移到你班级的__init__方法中来解决这个问题: / p>

def __init__(self, *args, **kwargs):
    from contacts.documents.models import Document

    self.document_model = Document
    super(MyRealtimeProcessor, self).__init__(args, kwargs)

然后在handle_save

d_index = self.connections[using].get_unified_index()\
                                             .get_index(self.document_model)