0

我正在尝试将 Haystack Elasticsearch 与使用 MongoDB 作为数据库的 django REST 应用程序集成。这是我的源代码:

模型.py

class Books(Document):
    ISBN = fields.StringField(null=False, required=True)
    book_name = fields.StringField(null=False, required=True)
    genre = fields.StringField(null=False, required=True)
    author = fields.StringField(null=False, required=True)
    publisher = fields.StringField(null=False,required=True)
    price = fields.IntField(required=True)
    stock = fields.IntField(required=True)

search_indexes.py

class BookIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
book = indexes.CharField(model_attr="book_name")
price = indexes.CharField(model_attr="price")

def get_model(self):
    return Books

def index_queryset(self, using=None):
    return self.get_model().objects.filter(
        created__lte=timezone.now()
    )

序列化程序.py

class BookIndexSerilizer(HaystackSerializer):
class Meta:
    index_classes = [BookIndex]
    fields = [
        'text', 'book', 'price'
    ]

视图.py

class BookSearchView(HaystackViewSet):
index_models = [Books]
serializer_class = BookIndexSerilizer

网址.py

router = routers.DefaultRouter()
router.register('search/', BookSearchView, 'Books')

设置.py

HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://localhost:9200/',
        'INDEX_NAME': 'haystack',
    },
}

当我点击搜索 URL 时,我得到以下异常:AttributeError('添加到查询的模型必须派生自 Model。')。出了什么问题?

4

1 回答 1

0

问题是Books派生自Document,它要求模型class Books(Document):派生自Model类似class Books(models.Model):

于 2018-07-10T09:50:38.963 回答