チェックボックスのセットと「その他」[指定してください] オプションの結果を CharField に入力する必要があります (以下のフォーム状態の場合、値は「option-a,other」になります)。フォームは基本的に次のようになります。
[x] option a
[ ] option b
[x] other
If you selected "other", please specify. [__________]
MultipleChoiceField のサブクラスを実装することで、ほとんどの方法でそこにたどり着くことができました。
class CommaStringMultipleChoiceField(MultipleChoiceField):
def to_python(self, value):
return [val.rstrip().lstrip() for val in value.split(',')]
def clean(self, value):
return ",".join([val.rstrip().lstrip() for val in value])
私のフォーム クラスでは、そのフィールドをフォーム フィールドに割り当てます。
TYPE_CHOICES = [
(u'option-a',u"Option A"),
(u'option-b',u"Option B"),
(u'other', u"Other"),
]
type = CommaStringMultipleChoiceField(
choices=TYPE_CHOICES,
widget=CheckboxSelectMultiple
)
これによりフォームが適切にレンダリングされ、カスタムの clean() メソッドが呼び出されますが、フォームを保存すると検証エラーが発生します。
Value u'education,other' is not a valid choice.
カスタムバリデーターを追加して遊んでみましたが、今のところ違いはありません。何が欠けていますか?