2010-03-25 13 views
5

W ModelForm, muszę przetestować uprawnienia użytkownika, aby pozwolić im wypełnienie odpowiednich pól:wyjmowanie pól z dynamicznym ModelForm

jest zdefiniowany następująco:

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 

Ten ModelForm działa : ukrywam każde pole w szablonie i powoduje, że pojawiają się dzięki javascript ...
Problem polega na tym, że każde pole zdefiniowane w modelu będzie wyświetlane na szablonie.
Chciałbym je usunąć z formularza, jeśli nie są potrzebne:
Przykład: jeśli użytkownik nie ma prawa do modelu firmy, nie będzie go używał w renderowanym formularzu w szablonie.

Problem to trzeba umieścić listę pól w Meta klasy postaci z pól lub wyklucza atrybut, ale nie wiem, jak zarządzać ich dynamicznie.

Każdy pomysł?
Dzięki z góry za jakąkolwiek odpowiedź.

Odpowiedz

9

Wystarczy usunąć go z self.fields dict:

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

Tak, to było oczywiste !!!! Wystarczy zdefiniować wszystkie pola w klasie Meta, a następnie usunąć, jeśli nie przydatne ... Wielkie dzięki! –

+4

to nie zadziała, jeśli masz zestaw pól określony na przykład w ModelAdmin. –

Powiązane problemy