Джанго: стог сена и эластичный поиск с Mongoengine - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь интегрировать Haystack Elasticsearch с моим REST-приложением django, которое использует MongoDB в качестве базы данных. Вот мой исходный код:

models.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()
    )

serializer.py

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

views.py

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

urls.py

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

settings.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.'). Что не так?

1 Ответ

0 голосов
/ 10 июля 2018

проблема в том, что Books является производным от Document, требуется модель class Books(Document):, полученная из Model, как class Books(models.Model):.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...