2010-03-25 11 views
5

In einer Modelform entfernen, muß ich Benutzerberechtigungen testen sie füllen die richtigen Felder zu lassen:ein Feld von einer dynamischen Modelform

es wie folgt definiert ist:

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 

Diese Modelform macht die Arbeit : Ich verstecke jedes Feld auf der Vorlage und mache sie dank Javascript ...
Das Problem ist, dass dieses ModelForm ist, dass jedes im Modell definierte Feld auf der Vorlage angezeigt wird.
Ich möchte sie aus dem Formular entfernen, wenn sie nicht benötigt werden:
Beispiel: Wenn der Benutzer kein Recht auf das Modell Unternehmen hat, wird es nicht in der gerenderten Form in der Vorlage verwendet werden.

Das Problem, dass ist die Liste der Felder in der Meta-Klasse der Form mit Feldern oder ausschließen Attribut setzen, aber ich weiß nicht, wie sie dynamisch zu verwalten.

Irgendeine Idee ??
Vielen Dank im Voraus für jede Antwort.

Antwort

9

löschen Sie es einfach aus den self.fields dict:

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

Ja, es war offensichtlich !!!! Nur müssen alle Felder in der Meta-Klasse definieren und dann entfernen, wenn nicht nützlich ... Vielen Dank! –

+4

Dies funktioniert nicht, wenn Sie ein Fieldset in einem ModelAdmin angegeben haben. –

Verwandte Themen