Джанго Хейстек добавить дополнительные данные для поиска - PullRequest
2 голосов
/ 17 ноября 2011

У меня поиск по стогу сена в настоящее время хорошо работает при поиске по следующей модели:

class AdminEntry(models.Model):
    product = models.ForeignKey('Product')
    number_entries = models.IntegerField(max_length=3,  null=True)

Мой search_indexes.py:

class AdminEntryIndex(SearchIndex):
    text = CharField(document=True, use_template=True)
    author = CharField(model_attr='product__author')
    title = CharField(model_attr='product__title')
    desc = CharField(model_attr='product__desc')

    def get_queryset(self):
        return AdminEntry.objects.all()

site.register(AdminEntry, AdminEntryIndex)

но теперь я хочу добавить дополнительный параметр поиска в раскрывающемся списке в моей форме поиска с 2 значениями ['Admin', 'Staff'], так как я добавил другую модель:

class StaffEntry(models.Model):
    product = models.ForeignKey('Product')
    number_entries = models.IntegerField(max_length=3,  null=True)

Я хочу, чтобы в моем поиске был поиск по StaffEntry, если выбрано раскрывающееся меню «Персонал», а AdminEntry - «Администратор». Может ли кто-нибудь помочь мне, как добиться этого, используя Haystack с Whoosh? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 августа 2013

forms.py

класс Поиск (SearchForm):

         OPTIONS = [
                ('staff','Staff'),
                ('admin','Admin')
               ]

          option = forms.ChoiceField(
                    widget=forms.Select(
                        attrs={'class':'cd-select','id':'cd-dropdown'}),
                        label='',
                        choices=OPTIONS,
                        )
         def __init__(self, *args, **kwargs):
             super(Search, self).__init__(*args, **kwargs)
             self.initial['option'] = 'staff'
             self.fields['q'].label = ''



        def search(self):
            if not self.is_valid():
                 return self.no_query_found()
            if not self.cleaned_data.get('q'):
                 return self.no_query_found()
            sqs = self.searchqueryset.auto_query(self.cleaned_data['q'])

            if self.cleaned_data['option'] == 'staff':
                 sqs = SearchQuerySet().auto_query(self.cleaned_data['q']).models(Staff)
            elif self.cleaned_data['option'] == 'admin':
                 sqs = SearchQuerySet().auto_query(self.cleaned_data['q']).models(Admin)
            if self.load_all:
                 sqs = sqs.load_all()
            return sqs
0 голосов
/ 12 апреля 2012

Что вам нужно, так это ModelSearchForm:

http://django -haystack.readthedocs.org / en / latest / views_and_forms.html # modelsearchform

useэто вместо SearchForm по умолчанию, и вы получите флажки для каждой индексированной модели.Если вы расширите форму, вы сможете изменить ее на выбор вместо флажков.

См. http://django -haystack.readthedocs.org / en / latest / views_and_forms.html # views для получения информации о том, как использовать пользовательскую форму в представлении.

...