Как я могу использовать фасеты поиска django-haystack с пользовательскими атрибутами? - PullRequest
2 голосов
/ 12 апреля 2019

У меня есть магазин Django-oscar, и я успешно установил Solr 4.7.2 в качестве поисковой системы.Он отлично работает с предопределенными атрибутами, например, upc, title, product_class ...

Но фильтрация дополнительных атрибутов не сработала.

Вот мой каталог / models.py:

class Product(AbstractProduct):
    video_url = models.URLField()
    co2 = models.IntegerField()
    is_public = models.BooleanField()
    test = models.TextField()

В search_indexes.py я попытался добавить что-то вроде:

co2 = indexes.IntegerField(model_attr="co2", null=True, indexed=False)

def prepare_co2(self, obj):
        return self.apps.get_model().objects.filter(co2="2")
       # return obj.co2 etc. here I tried a lot of code, but didnt work

Я также попытался скопироватьготовый код для этой функции.

У кого-нибудь есть идеи, как это сделать?Когда я фильтрую для catalogue.products.title, он работает нормально, но не с cataolgue.products.co2 (который я сам дополнил).

1 Ответ

0 голосов
/ 14 апреля 2019

Вы не можете фильтровать объекты из функции подготовки, вам нужно только указать, как стог сена может получить доступ к полю объекта.

from haystack import indexes
import oscar.apps.search.search_indexes as oscar_search_indexes


class ProductIndex(oscar_search_indexes.ProductIndex):
    co2 = indexes.IntegerField(null=False, indexed=True)

    def prepare_co2(self, obj):
        return obj.co2

Выше должно работать (как только вы переиндексировали свои продукты после обновления схемы Solr.xml), если нет, обновите ваш вопрос с ошибкой, которую вы получаете, или с неожиданным поведением запроса с примерами данных.

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