Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在导入应用程序的设置中调用的信号:失败_Django_Django Haystack - Fatal编程技术网

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

Django 在导入应用程序的设置中调用的信号:失败,django,django-haystack,Django,Django Haystack,我使用的是python3.4.3,Django 1.9.2和Django haystack 2.4.1 我只把必要的代码解释一下 这是我的设置: INSTALLED_APPS = ( ..., contacts.documents, haystack, contacts.search, ) HAYSTACK_SIGNAL_PROCESSOR = 'contacts.search.signals.MyRealtimeProcessor' from contact

我使用的是
python3.4.3
Django 1.9.2
Django haystack 2.4.1

我只把必要的代码解释一下

这是我的设置:

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

HAYSTACK_SIGNAL_PROCESSOR = 'contacts.search.signals.MyRealtimeProcessor'
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)
这是我的文件:contacts.search.signals.py:

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

HAYSTACK_SIGNAL_PROCESSOR = 'contacts.search.signals.MyRealtimeProcessor'
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.")
由于来自contacts.documents.models的
在我的信号中导入文档


如何更正?

在Django加载完所有应用程序之前,您无法加载模型。我不完全清楚为什么要在加载应用程序之前导入你的
signals.py
文件,但你可以通过将此逻辑移到类的
\uuuuuu init\uuu
方法来解决这个问题:

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

    self.document_model = Document
    super(MyRealtimeProcessor, self).__init__(args, kwargs)
然后在
handle\u save
中:

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