我需要用一组复选框的结果加上一个“其他”[请指定]选项填充一个 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.
我玩过添加自定义验证器,但到目前为止没有任何区别。缺少什么?