2010-04-28 6 views
3

Я думаю, что я не unterstand Джанго-стог правильно:Поиск по нескольким полям

У меня есть модель данных, содержащую несколько полей, и я хотел бы иметь два из них искали:

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True, default=None) 
    twitter_account = models.CharField(max_length=50, blank=False) 

Мои параметры индекса поиска:

class UserProfileIndex(SearchIndex): 
    text = CharField(document=True, model_attr='user') 
    twitter_account = CharField(model_attr='twitter_account') 

    def get_queryset(self): 
     """Used when the entire index for model is updated.""" 
     return UserProfile.objects.all() 

Но когда я выполняю поиск, поиск производится только по полю «имя пользователя»; «twitter_account» игнорируется. Когда я выбираю SearchResults через dbshell, объекты содержат правильные значения для «пользователь» и «twitter_account», но страница результат показывает «нет результатов»:

{% if query %} 
     <h3>Results</h3> 

     {% for result in page.object_list %} 
      <p> 
       <a href="{{ result.object.get_absolute_url }}">{{ result.object.id }}</a> 
      </p> 
     {% empty %} 
      <p>No results</p> 
     {% endfor %} 
    {% endif %} 

Любые идеи?

ответ

9

Я думаю, это потому, что haystack использует поле документа для общих поисковых запросов, если вы не определите конкретный поиск для других полей, таких как поле twitter_account.

from haystack documentation

Каждый SearchIndex требует там быть один (и только один) поле с документа = True. Это указывает как на Haystack, так и на поисковую систему около какое поле является основным полем для ищем внутри.

Попробуйте задав индекс следующим

class UserProfileIndex(SearchIndex): 
    text = CharField(document=True, use_template=True) 
    user = CharField(model_attr='user') 
    twitter_account = CharField(model_attr='twitter_account') 

и создать файл с именем поиска/индексы // userprofile_text.txt

, который будет содержать следующие

{{ object.user.get_full_name }} 
{{ object.twitter_account}} 

теперь haystack будет искать в содержимом этого файла (где вы можете добавить все, что захотите), когда вы не указываете индексный фильтр.

+0

работает отлично, спасибо большое. – schneck

Смежные вопросы