Removing a fields from a dynamic ModelForm
Posted
by Jérôme Pigeot
on Stack Overflow
See other posts from Stack Overflow
or by Jérôme Pigeot
Published on 2010-03-25T10:48:50Z
Indexed on
2010/03/25
10:53 UTC
Read the original article
Hit count: 442
In a ModelForm, i have to test user permissions to let them filling the right fields :
It is defined like this:
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('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('Association')
# choices
self.fields['type_resource'] = forms.ChoiceField(choices = choices)
class Meta:
Model = Title
This ModelForm does the work : i hide each field on the template and make them appearing thanks to javascript...
The problem is this ModelForm is that each field defined in the model will be displayed on the template.
I would like to remove them from the form if they are not needed:
exemple : if the user has no right on the model Company, it won't be used it in the rendered form in the template.
The problem of that is you have to put the list of fields in the Meta class of the form with fields or exclude attribute, but i don't know how to manage them dynamically.
Any Idea??
Thanks by advance for any answer.
© Stack Overflow or respective owner