从动态ModelForm中删除字段

Jér*_*eot 5 django field dynamic 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  
Run Code Online (Sandbox Code Playgroud)

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

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

任何的想法??
感谢提前回答任何问题.

Dav*_*cos 9

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

if not user.has_perm("blablabla"):
    del self.fields["company"]
Run Code Online (Sandbox Code Playgroud)

  • 如果您在ModelAdmin中指定了fieldset,则此方法无效. (6认同)