2009-12-23 86 views
0

哇,我在這上面很難。我必須做錯了,我得到了令人難以置信的查詢量。Django表單模型和編輯

所以,我的模型如下: 球員 氏族 匹配(如在遊戲比賽) MatchMap(地圖打了一場的) MatchPlayer(在比賽的球員)

所有這些通過外鍵關聯,沒有m2m關係。一個玩家可以在一個家族中,一場比賽涉及兩個家族。一場比賽可以有任何數量的地圖,只有來自兩個隊伍的球員可以參加比賽(儘管未來球員可能不會與他們在這場比賽中的同一個隊伍中,所以我指定他們在比賽)。

所以,我提交了匹配,一切正常。但要編輯這些信息,這是很重要的! 對於比賽的編輯MatchPlayers我嘗試使用inlineformset_factory

PlayersFormSet = inlineformset_factory(MatchBetweenClans, MatchPlayer) 
playersForms = PlayersFormSet(instance=match) 

這已經開始壞,因爲在比賽中的每個實例,Django的訪問數據庫,獲取的所有球員名單。例如,如果6名選手都在比賽,我有被inlineformset_factory provived 2點空的形式,我看到日誌

SELECT 
... 
FROM 
`accounts_customuser` 

8倍。

現在,即使這對我來說是正確的,它不會做我所需要的。當將球員加入比賽時,並非所有球員都應該在名單上,只有那些來自2個指定部落的球員,理想的是作爲複選框的形式(每個複選框是一個部族的球員)。在提交比賽,這是很容易做到:

clan1PlayerList = CustomUser.objects.filter(clan=clan1Instance) 
clan2PlayerList = CustomUser.objects.filter(clan=clan2Instance) 
playersClan1 = forms.ModelMultipleChoiceField(queryset=clan1PlayerList, label="Jogadores - "+clan1Instance.tag+"", widget=forms.CheckboxSelectMultiple(attrs={'class':'input_checkbox'})) 
playersClan2 = forms.ModelMultipleChoiceField(queryset=clan2PlayerList, label="Jogadores - "+clan2Instance.tag, widget=forms.CheckboxSelectMultiple(attrs={'class':'input_checkbox'})) 

反正是有,我可以有這樣的一個公式進行編輯?我無法找到一種方法將隊伍的球員列表和正確的球員發送給表單。 謝謝

+1

如果您發佈了模型而不是文字描述,那麼您的問題會更容易閱讀。不抱怨,只是我的意見。 :-) – cethegeek 2009-12-24 14:56:00

回答

3

你可能想看看select_related

Here are the docs.


我不得不去重讀你的問題,因爲它的問題部分是我不清楚。我認爲你有太多的查詢命中數據庫的問題(這也可能是一個問題,選擇相關將有助於那裏),但你的問題確實是:

如何篩選表單字段只允許基於值在不同的領域?

對不起?從你的問題:

當添加玩家匹配,並不是所有的球員應該在名單上,只有那些從2個指定的氏族,最好爲複選框的形式(每個複選框是一個家族的玩家) 。

在您的看法中,按照氏族篩選每個表單上的字段。喜歡的東西(沒有你的模型,我可以在字段名只能猜測):

form.fields['player'].queryset=form.fields['player'].queryset.filter(clan__in=list_of_selected_clans) 

無關建議:look at python's string interpolation

蟒蛇排序!

+0

謝謝你的回答celopes,一定會看看它 obrigado! – Clash 2009-12-26 10:42:14