Поиск в стоге сена по полю "многие ко многим" не работает

Я пытаюсь выполнить поиск в модели с полем «многие ко многим» и хочу отфильтровать поиск, используя это поле.

вот мой текущий код:

search_indexes.py

class ListingInex(indexes.SearchIndex, indexes.Indexable):
   text = indexes.CharField(document=True, use_template=True)
   business_name = indexes.CharField(model_attr='business_name')
   category = indexes.MultiValueField(indexed=True, stored=True)
   city = indexes.CharField(model_attr='city')
   neighborhood= indexes.CharField(model_attr='neighborhood')
   state = indexes.CharField(model_attr='state')
   address = indexes.CharField(model_attr='address')
   zip_code = indexes.CharField(model_attr='zip_code')
   phone_number = indexes.CharField(model_attr='phone_number')

    def get_model(self):
          return listing

    def index_queryset(self, using=None):
      return self.get_model().objects.all()

    def prepare_category(self, obj):
       return [category.name for category in obj.category_set.all()]

listing_text.txt

{{ object.business_name }}
{{ object.state }}
{{object.city}}
{{object.zip_code}}
{{object.phone_number}} 
{{object.neighborhood}}
{% for category in obj.category.all %}
{{ category.name }}
{% endfor %}

Я пытаюсь выполнить простой поиск, например:

search_results = SearchQuerySet().filter(category=query_text).filter

он возвращает пустой список. Заранее спасибо.


person camara90100    schedule 09.10.2013    source источник


Ответы (1)


Читая ваш код, я думаю, что проблема здесь:

{% for category in obj.category.all %}
{{ category.name }}
{% endfor %}

Категория не является объектом, это MultiValueField. Может быть, если вы попробуете что-то вроде:

{% for category in object.category.all %}
{{ category.name }}
{% endfor %}

object.category.all вместо obj.category.all. Я не уверен, что это решение, но я уверен, что ошибка может быть в этих 3 строках.

person AlvaroAV    schedule 09.10.2013
comment
Я изменил его, как вы сказали, и теперь только «SearchQuerySet().filter(content=query_text)» обнаруживает поиск по категории, но «SearchQuerySet().filter(category=query_text) по-прежнему возвращает пустой список. - person camara90100; 09.10.2013