Django将表单数据清理为列表而不是字符串

时间:2018-03-26 15:33:27

标签: django django-forms

我有一个带有多个选择字段的表单,例如:

FRUIT_CHOICES = (
('apple', 'apple'),
('orange', 'orange'),
)
fruits = forms.CharField(label='fruit type', widget=forms.CheckboxSelectMultiple(choices=FRUIT_CHOICES))

当用户检查两个“苹果”时和橘子'并提交表单,并验证表单,它生成一个字符串,其格式看起来像一个列表:

form.is_valid()
type(form.cleaned_data['fruits'])
>>> <class 'str'>
print(form.cleaned_data['fruits'])
>>> ['apple', 'orange']

现在,如果我想使用值&#39; apple&#39;和&#39;橙色&#39;在我看来,我必须创建一些类型的正则表达式来从字符串中删除它们。这似乎是一个麻烦的解决方案。如果有办法直接从表单对象获取这些数据作为列表?

1 个答案:

答案 0 :(得分:2)

forms.CharField不适合选择多个选项。您可以改为使用forms.MultipleChoiceField

fruits = forms.MultipleChoiceField(label='fruit type', choices=FRUIT_CHOICES, widget=forms.CheckboxSelectMultiple)

如果这是一个模型表单,并且您要保存到数据库,则会变得更加棘手,因为如果将列表保存到models.CharField,您将获得类似于"['apple', 'orange']"的字符串,这类似于你原来的问题。您可能会发现像django-multiselectfield这样的库很有用。