在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 类中使用 fields 或 exclude 属性来放置字段的列表,但我不知道如何动态管理它们。
有什么想法吗?
感谢您提前的任何答复。
self.fields['field_to_hide'] = forms.CharField(required=False, widget=forms.HiddenInput())
- benzkji