2011-05-25 46 views
3

我有一個名爲picks的模型,允許用戶從一個靜態列表中選擇一個nfl團隊。無論何時他們選擇一支球隊,他們都不能再選擇這支球隊,所以他們選擇的球隊會減少選擇的選擇。
我有一個功能,我在我的視圖中調用,指出他們還沒有選擇什麼球隊,但我無法弄清楚如何將這些信息傳遞給表單。我已經在網上查看了很多表單示例,但並未真正找到顯示如何完成此操作的示例。從我讀過的內容來看,似乎我應該從forms.py文件中調用該函數,但該函數需要將用戶ID和聯盟ID作爲參數傳入,所以我寧願只在模型中執行它。有人可以解釋,或者指給我一個解釋,說明如何從模型到表單中選擇字段選擇?django - 表單中的動態選擇字段

我在Django和Python都比較新,所以請原諒我在這裏做的任何明顯的疏忽。

謝謝!

編輯

好吧,我想也許我給了太多的非關鍵信息,這裏的問題,我會盡量簡化這裏的問題是:

我有這將創建一個視圖形成。表格中有一個選擇框。我根據當前用戶和啓動視圖的URL中的變量,計算視圖內選擇框中的選項。我想知道如何將選擇選項傳遞給表單,或者如果這不是應該如何完成的。

我現在沒有在我面前的代碼發佈,但我真的不認爲它與問題有關。我希望我已經足夠通用。

+0

您想分享一些代碼嗎?如您的模型,您的表格和您的視圖中的相關位。 – ayaz 2011-05-25 06:29:30

回答

0

我認爲最簡單的方法就是修改表單的查詢集。 這個想法是排除你不想要的球隊(因爲他們已經被選中)。

假設你有TeamUser之間的關係,請執行以下操作(在您看來)

form.fields['team'].queryset = Teams.objects.exclude(selected_by_user = user.id) 

記住一兩件事:

Teams.objects.exclude(selected_by_user = user.id, date = datetime(2008, 12, 31)) 

將匹配的的團隊用戶選擇AND不是從31/12/2008,而

Teams.objects.exclude(selected_by_user = user.id,).exclude(date = datetime(2008, 12, 31)) 

將匹配用戶未拾取的團隊從2008年12月31日起。

參考文獻: Django Querysets (exclude filter)

+0

請看看我的答案。一個查詢集就是你精確需要的。 – kiddouk 2011-05-28 12:38:10

0

您可以先定義表單沒有充滿活力的領域。後您的視圖中創建它的實例,您可以通過鍵入

form_instance.fields['your_field'] = ChoiceField(choices=list_of_two_tuples) 

添加動態選擇現場或使用ModelChoiceField,並鍵入類似

form_instance.fields['your_field'] = ModelChoiceField(queryset=Teams.filter(...)) 

或者你也可以使用類似的,但可能更清潔機制描述here