我正在使用Python 3.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'
这是我的文件: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
。
我该如何纠正?
答案 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)