1

在一个表单中,我想使用一个列表,其中包含 ChoiceField 中尚未选择的所有项目。为了做到这一点,我想遍历选择并丢弃被选中的那些(即在他们的 html 中有 selected="selected" )

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:我可以通过调用来遍历选项next()self.fields[].choices.__iter__但是如何确定选项是否被选中?

4

1 回答 1

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]
于 2012-08-03T08:02:14.207 回答