2013-06-28 62 views
1

我是比較新的Django和麪對,我還沒能解決一個問題:
我有兩個型號看起來像:Django的:迭代在視圖中的單個模型的多個實例

class Item(models.Model): 
    char1 = models.CharField(max_length=200) 
    char2 = models.CharField(max_length=200) 

class Entry(models.Model): 
    item = models.ForeignKey(Item) 
    choice = models.IntegerField() 

我已經在我的數據庫中存儲了很多項目,我基本上希望在一個視圖中隨機遍歷所有存儲的項目,併爲每個項目顯示帶有IntegerField和'next'按鈕的char1和char2,它們存儲一個新的Entry (與實際的物品,鍵入整數)在我的數據庫,並指引我到下一個(隨機)項目。

在研究過程中,我發現了例如表單嚮導和表單集,但這不是我想要的,嚮導需要多個表單模型,他可以連續顯示,但我想只顯示一個模型的每個實例(Item)併爲每個存儲一個Entry。

我希望有人可以給我一個提示在哪裏尋找,因爲無處找到了這個用例的文檔/教程,而且由於我對Django不是非常有經驗,所以我無法在瞬間...

祝你好運,並提前致謝!

+0

你是什麼意思的「隨機遍歷所有存儲的項目」? – zeantsoi

+0

我已經存儲了3個項目,item1,item2,item3。 每當我打電話給該網站時,它會以不同的順序顯示所有項目,如第一次調用:item2,* submit *,item3,* submit *,item1。在下一次呼叫中,例如item1 ist首先顯示。 – lanice

回答

0

從您的標題來看,問題是從單個(可能是隨機/未排序的)模型迭代多個項目。

如果我沒有弄錯,你要找的是Pagination。從該文本,一個小例子是:

>>> from django.core.paginator import Paginator 
>>> objects = ['john', 'paul', 'george', 'ringo'] 
>>> p = Paginator(objects, 2) 

>>> p.count 
4 
>>> p.num_pages 
2 
>>> p.page_range 
[1, 2] 

儘管上面示出的列表,Paginator也可以在查詢集的Django使用,並且它是摻入Django模板的功能。

讓我知道這是不是你以後。

乾杯。

+0

嘿,非常感謝,我想這可能正是我所需要的,不知道爲什麼我沒有到達那裏,並與形式和嚮導卡住..我會試試這個! – lanice

+0

沒問題!有時候發現你需要研究的東西的名稱可能與研究它一樣棘手。 – Rejected

+0

沒錯。我測試了一下,這就是我正在尋找的,再次感謝! 但仍然有一個問題,我現在可以爲每個頁面顯示創建一個新的Entry對象,並在用戶提交一些數據後將其保存到我的數據庫? – lanice

0

Paulo Bu的回答提供了從Django的AP中首先獲得隨機排序的方法。關於你在做什麼的棘手部分是,它不是真的RESTful來保存頁面加載之間的項目的特定隨機排序,因爲這不是無狀態的。默認情況下,只要您提供請求,您隨機排序的查詢集就會失效,並且不能保證您將遍歷所有項目而不是重複和未命中。所以你想要保存這個順序。有用於指導您在這一串的選擇:

  1. 每個請求即成項ID的整個隨機列表,並有後臺通過索引
  2. 爲所有服務爲當前項目的數據的數據 - 完整的項目和條目 - 然後您可以呈現客戶端的所有內容
  3. 將隨機化列表存儲爲會話變量
  4. 通過添加0到1之間的浮點來存儲項目的永久性隨機排序到每個項目,按該浮點排序,然後從隨機索引開始(如果您不關心每個用戶是否具有相同的總體permutati )
+0

好的,謝謝你提供這些信息!我認爲第4點已經結束,因爲重要的是每個用戶都可以得到不同的排列。 但點1到3看起來不錯,謝謝你!我會明確地嘗試一下! – lanice

相關問題