2012-08-03 62 views
1

在形式我想使用包含有尚未選定ChoiceField所有項目的列表。爲了做到這一點,我想通過選擇迭代並丟棄所選擇的那些(即選擇在他們的HTML =「選擇」)如何檢查ChoiceField中的項目是否被選中?

class MethodForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MethodForm, self).__init__(*args, **kwargs) 
     #pseudo-code starts here 
     exclude = [] 
     for val in self.fields['someM2Mfield'].choices: 
      exclude.append(val.is_selected) 
     #/pseudocode 
     rule_choices = get_rule_choices(exclude) 
     self.fields['rule'] = forms.ChoiceField(rule_choices) 
     ... 

中的僞位是我不知道用什麼方法/要使用的屬性。任何人都可以啓發我嗎?

PS:我可以在self.fields[].choices.__iter__上調用next()來遍歷選項,但是如何確定選擇是否被選中?

回答

1

形式的self.inital應該給你與形式的所有字段的初始值的字典。所以self.initial['someM2Mfield']應該返回已經選擇。如果您需要選擇選擇列表你可以這樣做:

selected_values = self.initial['someM2Mfield'] 
rule_choices = [(value, text) for value, text in 
       self.fields['someM2Mfield'].choices 
       if value in selected_values] 
+0

現有形式這隻作品。當添加了新的形式(MethodForm是一個formset的一部分),現有的值仍然排除,但在新添加的形式的值不是。任何想法,我怎麼能包括這些呢? – 2012-08-04 01:27:26

+0

沒關係,發現根據你的答案+自己的一個新形式的情況下,一些家庭釀造的解決方案。 – 2012-08-04 01:45:57

相關問題