当我在使用django框架的时候遇到一个情况。我使用了django的modelform表单功能,并且将该表单对应了一个model。该model里有一个字段我使用了choices功能。其中的代码片段如下:
#这个是model中的定义 class Process(models.Model): STATE_CHOICE = ( (1, '新增'), (2, '处理中'), (3, '完成'), ) state = models.IntegerField(choices=STATE_CHOICE,default=1,verbose_name = u'状态') ................... ................... #这个是表单的定义 class ProcessDistributeForm(forms.models.ModelForm): class Meta: model = Process fields = ('state','memo') widgets = { 'state' : forms.Select(), 'memo' : forms.Textarea(attrs={'class':'form-control','rows':10}) }
然后在页面显示的时候也很正常。下拉框中的内容也是我定义的可选择列表。
但是我现在有这么一个需求,就是在使用这个表单的页面上我想让state这个字段的下拉框可选项只有 ((2, '处理中'),(3, '完成'),),不包含(1,'新增')。也就是说我想让这个表单的可选择项可以2次定义,而不是沿用model中定义的选择项。
上官方文档找了很久也找不到(无奈= =!),最后终于在stackoverflow(比较接地气,官方文档太多而且太正式了)上找到了。所以这里就记录下,先贴代码。
class ProcessDistributeForm(forms.models.ModelForm): def __init__(self, *args, **kwargs): super(ProcessDistributeForm,self).__init__(*args, **kwargs) self.fields['state'].choices = ( (2, '处理中'), (3, '完成'), ) class Meta: model = Process fields = ('state','memo') widgets = { 'state' : forms.Select(), 'memo' : forms.Textarea(attrs={'class':'form-control','rows':10}) }
就是重新定义下初始化方法,把对应的选择框的值修改掉就可以了。。。。。。
Cloudhu 个人随笔|built by django|
沪ICP备16019452号-1