2010-10-24 67 views
2

我一直在尋找,並試圖得到這個在過去的幾個小時的工作,我不能Django的ModelMultipleChoiceField(默認值)

我有,我從數據庫中取技能列表:

forms.ModelMultipleChoiceField(
           skills.objects.all(), 
           required=True, 
           widget=forms.CheckboxSelectMultiple(), 
           label='Check your skills.', 
           initial=skill_list.objects.filter(user='void'), 
          ) 

但這不工作,因爲我期望它的工作。我基本上想要顯示技能列表(所有這些)以及用戶選中要檢查的技能列表......我甚至不能解釋正確。

在用戶選中複選框並點擊提交另一個頁面後,我想顯示所有技能以及用戶選中要檢查的技能。

可以說我有abc和用戶檢查b並點擊提交時,單位爲W/E頁我想顯示a uncheked b檢查c選中。

PS:如果我使用skills.objects.all(),我得到的HTML value 1和我怎麼能做出這樣的:

skills = (
     ('a', 'a'), 
     ('b', 'b'), 
     ) 

而不是('1', 'a'), ('2', 'b')

回答

2

你的問題有點不清楚,但我仍然盡我所能。

首先,

我想顯示所有的技能和一個 用戶選中進行檢查......

形式亙古不變的訪問用戶,所以你需要通過它是用戶。你可以通過重載__init__方法,像這樣做:

def __init__(self, **kwargs): 
     current_user = kwargs.pop ('user') 
     super(FormName, self).__init__(attrs) 

然後設置最初選擇的值,

self.fields['skills'].initial = skill_list.objects.filter(user='void') 

記住,你必須調用基類的構造函數之後做到這一點。

最後,

PS:如果我使用skills.objects.all()我 得到的HTML值1和如何 我把這作爲

技能=( ( 'A', 'A'), ( 'b', 'b'), )

代替( '1', 'A'),( '2', 'b')

你爲什麼要這麼做?這些數字是您「技能」表中行的主鍵。 Django使用它來設置適當的關係。

+0

爲什麼要這樣做?首先thx爲你答覆...在用戶提交這個表單之後,我想讓值爲1而不是1,因爲我不想查詢數據庫的內容1,並根據這些數據執行操作......不知道這是否正確,我可以使用主鍵但我很懶:D thx再次爲您的答覆:) – void 2010-10-27 22:10:15