【问题标题】:CheckboxSelectMultiple validation error when submitting the form on Django在 Django 上提交表单时出现 CheckboxSelectMultiple 验证错误
【发布时间】:2017-01-09 22:59:53
【问题描述】:

模型.py

class MyModel(models.Model):
      OPTION_CHOICES = (('a','a'),('b','b'))
      option = models.CharField(max_length=1, choices=OPTION_CHOICES)

forms.py

class MyForm(ModelForm):
      class Meta:
            model=MyModel
            fields=['option']
            widgets = {'option':CheckboxSelectMultiple(),}

当我尝试提交表单时,出现验证错误,无法提交。当我碰巧CheckboxSelectMultipleRadioSelect 它工作得很好。那么如何使用checkboxSelectMultiple 解决这个问题

【问题讨论】:

  • 错误说明了什么?当您同时选择“a”和“b”时,您认为会在选项字段中保存什么?您的字段应该接受多个选项。您可以将字段名称从 option 更改为 opntions 并使其成为多对多字段,以便它可以存储(与)多个对象的关系。
  • @allcaps 错误提示 选择一个有效的选项。 [u'a'] 不是可用的选项之一。
  • 是的,[] 是一个列表。并且没有选项是列表。您不能将列表存储在接受单个字符的字段中。见我的其他 cmets。
  • @allcaps ManyToManyField 要求我指定与我没有的另一个模型的关系,还有其他解决方案吗?

标签: django-models django-forms


【解决方案1】:
option = models.CharField(max_length=1, choices=OPTION_CHOICES)

只接受一个字符。通过提交带有多项选择小部件的表单,您可以尝试存储一个列表:

[u'a']

这当然会导致错误:

Select a valid choice. [u'a'] is not one of the available choices.

同样:'a''b' 是字符串和有效的选择,[u'a'] 是一个无效的列表。

要存储列表(或多个关系),您应该选择其他字段类型。什么字段类型完全取决于您的项目要求。没有足够的信息给你建议使用什么。

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 2021-07-09
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多