2013-03-18 24 views
0

我需要能夠將數據從這樣的指標進行排序:Django-Haystack - 如何使用獲取參數進行排序?

http://mywebapp.com/search/?q=something&sort_by=points-desc 

換句話說,我需要在URL中傳遞「sort_by」的價值。我試圖搜索文檔,但我找不到任何示例。

有人可以提供一個關於如何實現這一目標的線索嗎?

我使用Django的草垛2.0和搜索查看()

任何線索?


更新:乾草堆搜索索引

class LinkViewIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    section = indexes.CharField(model_attr='section') 
    section_id = indexes.CharField(model_attr='section_id') 
    item_author_username = indexes.CharField(model_attr='item_author_username') 
    title = indexes.CharField(model_attr='title') 
    url = indexes.CharField(model_attr='url') 
    url_image = indexes.CharField(model_attr='url_image') 
    comments = indexes.CharField(model_attr='comments', null=True) 
    comments_count = indexes.CharField(model_attr='comments_count') 
    points = indexes.CharField(model_attr='points') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def get_model(self): 
    return LinkView 

    def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(date_inserted__lte=datetime.datetime.now()) 


class TextViewIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    section = indexes.CharField(model_attr='section') 
    section_id = indexes.CharField(model_attr='section_id') 
    item_author_username = indexes.CharField(model_attr='item_author_username') 
    title = indexes.CharField(model_attr='title') 
    texto = indexes.CharField(model_attr='texto') 
    comments = indexes.CharField(model_attr='comments', null=True) 
    comments_count = indexes.CharField(model_attr='comments_count') 
    points = indexes.CharField(model_attr='points') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def get_model(self): 
    return TextView 

    def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(date_inserted__lte=datetime.datetime.now()) 


class OffTopicLinkViewIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    section = indexes.CharField(model_attr='section') 
    section_id = indexes.CharField(model_attr='section_id') 
    item_author_username = indexes.CharField(model_attr='item_author_username') 
    title = indexes.CharField(model_attr='title') 
    url = indexes.CharField(model_attr='url') 
    url_image = indexes.CharField(model_attr='url_image') 
    comments = indexes.CharField(model_attr='comments', null=True) 
    comments_count = indexes.CharField(model_attr='comments_count') 
    points = indexes.CharField(model_attr='points') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def get_model(self): 
    return OffTopicLinkView 

    def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(date_inserted__lte=datetime.datetime.now()) 


class OffTopicTextViewIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    section = indexes.CharField(model_attr='section') 
    section_id = indexes.CharField(model_attr='section_id') 
    item_author_username = indexes.CharField(model_attr='item_author_username') 
    title = indexes.CharField(model_attr='title') 
    texto = indexes.CharField(model_attr='texto') 
    comments = indexes.CharField(model_attr='comments', null=True) 
    comments_count = indexes.CharField(model_attr='comments_count') 
    points = indexes.CharField(model_attr='points') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def get_model(self): 
    return OffTopicTextView 

    def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(date_inserted__lte=datetime.datetime.now()) 


class BusinessLinkViewIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    section = indexes.CharField(model_attr='section') 
    section_id = indexes.CharField(model_attr='section_id') 
    item_author_username = indexes.CharField(model_attr='item_author_username') 
    title = indexes.CharField(model_attr='title') 
    country = indexes.CharField(model_attr='country') 
    localidades = indexes.CharField(model_attr='localidades') 
    url = indexes.CharField(model_attr='url') 
    url_image = indexes.CharField(model_attr='url_image') 
    comments = indexes.CharField(model_attr='comments', null=True) 
    comments_count = indexes.CharField(model_attr='comments_count') 
    points = indexes.CharField(model_attr='points') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def get_model(self): 
    return BusinessLinkView 

    def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(date_inserted__lte=datetime.datetime.now()) 


class BicycleAdViewIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    section = indexes.CharField(model_attr='section') 
    section_id = indexes.CharField(model_attr='section_id') 
    item_author_username = indexes.CharField(model_attr='item_author_username') 
    title = indexes.CharField(model_attr='title') 
    country = indexes.CharField(model_attr='country') 
    city = indexes.CharField(model_attr='city') 
    n_item_kind = indexes.CharField(model_attr='n_item_kind') 
    n_bicycle_ad_condition = indexes.CharField(model_attr='n_bicycle_ad_condition') 
    bicyclead_link_url = indexes.CharField(model_attr='bicyclead_link_url', null=True) 
    bicyclead_link_url_image = indexes.CharField(model_attr='bicyclead_link_url_image', null=True) 
    bicyclead_insite_image = indexes.CharField(model_attr='bicyclead_insite_image', null=True)  
    texto = indexes.CharField(model_attr='texto', null=True) 
    telephone = indexes.CharField(model_attr='telephone', null=True) 
    price = indexes.CharField(model_attr='price', null=True) 
    n_bicycle_ad_payment_type = indexes.CharField(model_attr='n_bicycle_ad_payment_type', null=True) 
    propriedades = indexes.CharField(model_attr='propriedades', null=True) 
    comments = indexes.CharField(model_attr='comments', null=True) 
    comments_count = indexes.CharField(model_attr='comments_count') 
    points = indexes.CharField(model_attr='points') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def get_model(self): 
    return BicycleAdView 

    def index_queryset(self, using=None): 
    """Used when the entire index for model is updated.""" 
    return self.get_model().objects.filter(date_inserted__lte=datetime.datetime.now()) 

的問題應該是。我怎樣才能通過GET參數由「點」或「date_inserted」使用這樣的命令:乾草堆

http://mywebapp.com/search/?q=something&sort_by=points-desc 

回答

1

覆蓋get_queryset方法並添加您的排序字段,索引模式,例如:

class LinkListView(ListView): 
    context_object_name = 「link」 

    def get_queryset(self): 
     sort = self.request.GET.get(‘sort_by’) 
     if sort: 
      return Link.published.filter().order_by('{0}'.format(sort)) 
     else: 
      return Link.published.filter().order_by('-date_inserted') 
+0

嗨Catherina。感謝您的回覆。我可以查詢索引而不是模型嗎? – 2013-03-18 13:18:21

+0

我可以看到你的索引嗎? – catherine 2013-03-18 13:20:51

+0

我已經包含索引。我也忘記指出我正在使用ElasticSearch。謝謝 – 2013-03-18 13:41:53

相關問題