我有一个带有多个选择字段的表单,例如:
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;在我看来,我必须创建一些类型的正则表达式来从字符串中删除它们。这似乎是一个麻烦的解决方案。如果有办法直接从表单对象获取这些数据作为列表?
答案 0 :(得分:2)
forms.CharField
不适合选择多个选项。您可以改为使用forms.MultipleChoiceField
。
fruits = forms.MultipleChoiceField(label='fruit type', choices=FRUIT_CHOICES, widget=forms.CheckboxSelectMultiple)
如果这是一个模型表单,并且您要保存到数据库,则会变得更加棘手,因为如果将列表保存到models.CharField
,您将获得类似于"['apple', 'orange']"
的字符串,这类似于你原来的问题。您可能会发现像django-multiselectfield
这样的库很有用。