2014-02-20 24 views
0

這涉及到學生電子日記。學生頁面包含當天的所有學習時間段,每個時間段可以附加一個或多個附加的時間段。django表格搜索方法,過濾器,index_together或haystack

目前我的代碼是:

notes = [] 
for note in db.StudentPeriodNote.objects.all(): 
    if student_id == note.student_id: 
     if day == note.day: 
      if period == note.period_text: 
       notes.append(note) 

或者它可能是: -

notes = db.StudentPeriodNote.objects.filter(student_id=student_id, day=day, period=period) 

在學年結束時有可能在表10-100,000筆記。 這個查詢每個週期被調用一次,所以每天查詢10-12次,或者一週查詢5次。

我擔心的是,對於學生顯示一天或幾周時間表的每個請求,多次調用此查詢將會很慢。

我可以在三個字段上使用index_together來加速搜索(注意:如果我將index_together添加到models.py然後運行dbsync,索引是否會創建,或者是否需要再次加載數據?)

我還沒有使用乾草堆,這是乾草堆適當的用途嗎?

+0

我加index_together的模型類,跑執行syncdb - 沒有它沒有索引添加到數據庫中,我不得不刪除該表,然後運行執行syncdb,這意味着我需要保存記錄和重新加載它們 – jimscafe

回答

1

我不知道index_together或haystack是否適合您的問題,但我可以回答有關將index_together添加到模型中的問題。

對於Django < 1.7,Django在初始syncdb後不會更改數據庫。如果你想遷移模型和數據,你必須使用第三方Django應用程序South。

http://south.aeracode.org/

網站上的文檔是相當不錯的,很容易,一旦你學會了基本的使用。我在所有的Django項目中都使用它來隨着需求和功能的變化而慢慢地改變模型和數據。

對於Django> = 1.7(尚未發佈),模型和數據遷移將包含在Django中,您不必使用South。

https://docs.djangoproject.com/en/1.7/topics/migrations/