python - 在 Django 中实现多个(复选框)选择 + "Other"小部件

标签 python django forms validation modelform

我需要用一组复选框的结果和一个“其他”[请指定] 选项填充一个 CharField(对于下面的表单状态,该值将是“选项-a,其他”)。表单基本上看起来像:

[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.

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

最佳答案

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

关于python - 在 Django 中实现多个(复选框)选择 + "Other"小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6743022/

相关文章:

python - celery - 没有名为五的模块

asp.net-mvc - 带有 GET 方法的 Html.BeginForm()

php - 如何解决 HTTP/1.1 302 Found error when trying to get a contents of a form in php?

python - 'str' 不支持 oauth 的缓冲区接口(interface) Python 3 错误

使用特定 python 版本的 python make virtualenv 失败

python - 运行连接到 Django 测试数据库的 Celery worker

python - Django celery 导入错误 : no module named celery when using gunicorn bind?

python - 表单中的 Django 数组值

python - SQLAlchemy 初始化开销较高

python - 如何先按递减值排序,然后按第二个值递增排序