2010-03-25 82 views
5

在的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是模型中定义的每个字段都将显示在模板上。
如果不需要它们,我想将它们从表单中删除:
例如:如果用户对模型Company没有权限,则不会将其用于模板中的呈现表单中。

的那个问题是你必须把字段列表在Meta类的形式与领域排除属性,但我不知道如何动态地管理它们。

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

回答

9

刚从self.fields删除字典:

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

是的,很明显!!!!只需要定义Meta类中的所有字段,然后删除即使不是有用的... 非常感谢! – 2010-03-25 15:54:42

+4

如果您在例如ModelAdmin中指定了字段集,这将不起作用。 – 2013-05-13 08:34:34