从动态ModelForm中删除字段

时间:2010-03-25 10:48:50

标签: django dynamic field modelform

在ModelForm中,我必须测试用户权限,让他们填写正确的字段:

它的定义如下:

class TitleForm(ModelForm):    
    def __init__(self, user, *args, **kwargs):
        super(TitleForm,self).__init__(*args, **kwargs)            
        choices = ['','----------------']
        # company
        if user.has_perm("myapp.perm_company"): 
            self.fields['company'] = forms.ModelChoiceField(widget=forms.HiddenInput(),
                queryset=Company.objects.all(), required=False) 
            choices.append(1,'Company')
        # association
        if user.has_perm("myapp.perm_association")
            self.fields['association'] =
            forms.ModelChoiceField(widget=forms.HiddenInput(),
                queryset=Association.objects.all(), required=False)
            choices.append(2,'Association')
        # choices
        self.fields['type_resource'] = forms.ChoiceField(choices = choices)

    class Meta:
        Model = Title  

这个ModelForm可以完成这项工作:我隐藏模板上的每个字段,并通过javascript ...使它们显示出来 问题是这个ModelForm是模型中定义的每个字段都将显示在模板上 如果不需要,我想将它们从表格中删除:
例如:如果用户对模型公司没有权利,则不会在模板中的呈现形式中使用它。

问题是你必须将字段列表放在带有字段排除属性的表单的Meta类中,但我不知道如何动态管理它们。

任何想法? 感谢提前回答。

1 个答案:

答案 0 :(得分:9)

只需从 self.fields dict中删除它:

if not user.has_perm("blablabla"):
    del self.fields["company"]