2011-11-05 41 views
1

我是Django和Haystack的新手...我需要知道如何通過日期/時間戳排序搜索結果,最近的第一條。Django Haystack - 如何使用時間戳進行排序?

這裏是我的model.py:

class adsText(models.Model): 
    hash   = models.TextField(primary_key=True) 
    title   = models.TextField() 
    description = models.TextField() 
    country  = models.TextField() 
    zone   = models.TextField() 
    location  = models.TextField() 
    date_inserted = models.DateTimeField() 
    class Meta: 
     db_table = u'ads_text' 
     managed = False 

    def __unicode__(self): 
     return self.title 

我search_indexes.py:

class adsTextIndex(indexes.SearchIndex): 
    text   = indexes.CharField(document=True, use_template=True) 
    title   = indexes.CharField(model_attr='title') 
    description  = indexes.CharField(model_attr='description') 
    zone   = indexes.CharField(model_attr='zone') 
    location  = indexes.CharField(model_attr='location') 
    date_inserted = indexes.DateTimeField(model_attr='date_inserted') 

    def index_queryset(self): 
     """Used when the entire index for model is updated.""" 
     return adsText.objects.order_by('-date_inserted') 
     #return adsText.objects.filter(date_inserted__lte=datetime.datetime.now()) 

site.register(adsText, adsTextIndex) 

我的urls.py:

urlpatterns = patterns('', 
    (r'^search/', include('haystack.urls')), 
) 

我已經測試改變這條線的search_indexes.py中的代碼,但它不像預期的那樣工作:

return adsText.objects.order_by('-date_inserted') 

我已閱讀,要走的路是用這樣的事情在urls.py:

sqs = SearchQuerySet().order_by('-date_inserted') 

我懷疑是我怎麼能這個代碼添加到urls.py的「URL模式」 ,關於如何實現這一目標的任何線索?

最好的問候,

+0

您可以在模型的元DEF添加順序:HTTPS ://docs.djangoproject.com/en/dev/ref/models/options/#ordering – danihp

+0

嗨danihp。謝謝回覆。但它不起作用。 –

+0

你有沒有嘗試:在元類上命令= ['-date_inserted']並且不起作用?這是奇怪的。 Perphaps乾草堆旁路訂購元模型。 – danihp

回答

4

看一看這裏:http://django-haystack.readthedocs.org/en/latest/views_and_forms.html#views

具體來說,你可能希望你的URL配置看起來像這樣:

from django.conf.urls.defaults import * 
from haystack.query import SearchQuerySet 
from haystack.views import SearchView 

sqs = SearchQuerySet().order_by('-date_inserted') 

urlpatterns = patterns('haystack.views', 
    url(r'^search/$', SearchView(
     searchqueryset=sqs, 
    )), 
) 
+0

order_by返回什麼?當我嘗試在模板中執行for循環時,我得到「類型爲'SearchResult'的對象沒有len()」。它不會返回可以循環的SearchQuerySet嗎?我對這個感到困惑。 –

+0

它返回一個SearchQuerySet,它是一個SearchResult對象的迭代器。聽起來像你試圖循環一個SearchResult? – Greg

+0

我不得不使用過濾器來工作,這是在我的views.py文件,所以它必須是不同的。我做了MySearchQuerySet.filter()。order_by(' - date_start')。假設這與Haystack的「最新」功能相同,但我似乎無法循環使用最新的函數,面臨一些奇怪的困難。謝謝你的迴應。 –

相關問題