如何检查ChoiceField中的项目是否被选中?

问题描述:

在形式我想使用包含有尚未选定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()来遍历选项,但是如何确定选择是否被选中?

形式的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