3

我需要用一组复选框的结果加上一个“其他”[请指定]选项填充一个 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.

我玩过添加自定义验证器,但到目前为止没有任何区别。缺少什么?

4

2 回答 2

1

由于该错误仅在您将模型实例保存到表单之外时才会发生,因此请检查“Value u'education,other' is not a valid choice”错误是否来自模型验证而不是表单验证。如果choices您真的想在模型字段上存储一个自由格式的字符串,则可能会发生这种情况。

于 2011-07-19T21:53:50.987 回答
0

您可能需要覆盖类上的 Validate 方法。在https://code.djangoproject.com/browser/django/trunk/django/forms/fields.py#L682的代码中,您将看到它在哪里引发错误消息。

于 2011-07-19T14:12:32.257 回答