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 に答える