昨天花了一天才解决,遇到的问题如下:
在forms.py里有一个如下的字段:
jira_issue = forms.CharField( required=False, label=u"Jira问题", widget=forms.SelectMultiple( attrs={ 'class': 'form-control col-md-7', 'class': 'select2_single form-control', 'data-placeholder': 'jira问题', 'style': 'width:300px; ', 'multiple': "multiple", } ), )
因为widget表现为SelectMultiple,而Field为CharField。所以如果后台能拆到jira_issue,得到的也是会字符串,而不是列表。这明显段位不高。
我也测试过另一种方案,就是将CharField更改为再multichoice这样的字段,但在django里,这样的定义在经过form验证时,要提前写好CHOICE选项。
而这个jira_issue无法提前定义choice。它的值都是即时从jira api里得到的。
那么,这如何是好呢?
两种实现,但后端代码都雷同的。
一,不使用forms.py里的字段,然后,在form_valid里自己额外获取列表。
二,使用formy.py,但这个字段获取到之后,并不使用,在form_valid里自己额外获取列表。
这种思路有点hack,我也想不到其它的东东了。赶进度呢~~~~~~~
class DeployCreateView(FormView): template_name = 'version/create_deploy.html' form_class = DeployForm .... def form_valid(self, form): jira_issue_list = self.request.POST.getlist('jira_issue') ....
代码中红字是关键,从self的request请求中拿到列表形式的选项。