在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类中,但我不知道如何动态管理它们。
任何想法? 感谢提前回答。
答案 0 :(得分:9)
只需从 self.fields dict中删除它:
if not user.has_perm("blablabla"):
del self.fields["company"]