2011-02-08 53 views
0

我正在創建的應用程序向用戶顯示所有模型實例的項目列表。我希望他們能夠使用JQuery的sortable()方法對項目進行排序。這是實施和正常工作,但我需要一種方法來保存它們列出的順序。此列表更新頻率較高,項目被刪除並添加新項目。用Django&Ajax製作用戶可排序列表的有效方法是什麼?

我最初的方法是給模型一個「位置」列,每次列表項在列表中移動時,更改列表中所有項的位置值。但是,這將需要我每次對1進行排序時獲取所有模型對象,並對每個對象應用更改。

我能想出的唯一方法是給每個「重量」值,而不是他們的實際列表位置。在每個值之間留出足夠的空間以填補空白。舉例來說,權重爲10,20,30,120。如果用戶將第四項移動到第二位置,則看第一項和第二項並選擇15作爲其權重。這當然只能在所有重量必須重新計算才能放置物品之前運行。

我是否在推翻這個?我不期望從這個應用程序的高使用率,所以額外的模型調用使用位置列不會真的是一個問題 - 但如果有一個更好,更有效的方法來做到這一點,我仍然會喜歡做它那樣。

感謝:-)

回答

0

我會跟蹤瀏覽器的排列順序,使每個表得到了排序,節省了排序順序,以會話變量時一個AJAX調用服務器。 (http://docs.djangoproject.com/en/dev/topics/http/sessions/)

1

現在你讓我過度思考這個! :)

你可以採取鏈接列表樣式的方法。在領域之前和之後給予你的模型(prev,next,無論你想給他們打電話)。你仍然需要你的體重字段進行排序,但我認爲你可以使用字符字典按字典順序排序。

因此添加新條目指標準鏈接列表中插入:

  1. 設置的新條目
  2. 的分組字段設置爲新條目的下一個字段的分組字段的下一個字段
  3. 將prev模型的下一個字段設置爲新模型。

此外,你需要爲你的新領域選擇一個重量。就像之前的條目的重量一樣,附加了「.1」,這會很好地排序。

去除和重新排序是相似的。

然後,你需要一個cron作業一起去和每一個現在,然後清理你的權重。

這會降低你只打了幾個模型,當你插入和重排...

編輯:其實,你可能甚至不需要prev和next領域 - 的辭書方法可能只是工作精 - 但是這沒有經過太硬想......我想我已經想太多關於這個已;)

相關問題