Удаление полей из динамической ModelForm - PullRequest
5 голосов
/ 25 марта 2010

В 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 заключается в том, что каждое поле, определенное в модели, будет отображаться в шаблоне.
Я хотел бы удалить их из формы, если они не нужны:
пример: если пользователь не имеет права на модель компании, он не будет использоваться в представленной форме в шаблоне.

Проблема в том, что вы должны поместить список полей в мета-класс в форме с fields или exclude attribute, но я не знаю, как управлять их динамически.

Любая идея ??
Заранее спасибо за любой ответ.

1 Ответ

9 голосов
/ 25 марта 2010

Просто удалите его из self.fields dict:

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