9

在 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 类中,但我不知道如何动态管理它们。

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

4

1 回答 1

14

只需从self.fields字典中删除它:

if not user.has_perm("blablabla"):
    del self.fields["company"]
于 2010-03-25T15:35:06.510 回答