那年那日那朵花

".......(o´ω`o)......"

django框架modelform重新定义下拉框选项

2016-07-28 16:04 python django

当我在使用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