2011-11-17 40 views
2

我有一個草垛搜索當前工作以及以下模型搜索:Django的草堆添加額外的輸入來搜索

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) 

如果選擇的下拉列表是'Staff',並且AdminEntry是'Admin'被選中,我想要搜索我的搜索StaffEntry。有人可以幫助我如何使用Hayoshack和Whoosh來實現這一目標嗎?提前致謝。

回答

0

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 
相關問題