2010-03-03 11 views
6

ich ein Formular anzurufenden wie folgt, dann ist es zu einer Vorlage vorbei:Django - Zugang request.session in Form

f = UserProfileConfig(request) 

Ich brauche die request.session in Form zugreifen können ... so zuerst versuchte ich dies:

class UserProfileConfig(forms.Form): 

    def __init__(self,request,*args,**kwargs): 
     super (UserProfileConfig,self).__init__(*args,**kwargs) 
     self.tester = request.session['some_var'] 

    username = forms.CharField(label='Username',max_length=100,initial=self.tester) 

das hat nicht funktioniert, ich sammle, weil, wenn das Formular aufgebaut ist, im Vergleich zu den Benutzername Charfield Einstellung.

Also nächstes habe ich versucht, dies:

class UserProfileConfig(forms.Form): 

def __init__(self,request,*args,**kwargs): 
    super (UserProfileConfig,self).__init__(*args,**kwargs) 
    self.a_try = forms.CharField(label='Username',max_length=100,initial=request.session['some_var']) 


username = self.a_try 

ohne Erfolg.

Irgendwelche anderen Ideen?

Antwort

9

Versuchen Sie folgendes:

class UserProfileConfig(forms.Form): 

    def __init__(self,request,*args,**kwargs): 
     super (UserProfileConfig,self).__init__(*args,**kwargs) 
     self.fields['username'] = forms.CharField(label='Username',max_length=100,initial=request.session['some_var']) 

ich diesen Artikel über dynamic forms sehr hilfreich.

+0

wie ein Charme! Vielen Dank. Wrestling für eine Weile. – Brant

1

Ich bin so überrascht, dass Django Sitzung in Form verwenden ist so schwer. Manchmal müssen wir wirklich Sitzungsdaten in Form von gültigen Feldern verwenden.

Ich erstelle ein kleines Projekt kann dies lösen. django-account-helper

Beispielcode:

from account_helper.middleware import get_current_session 

Class YourForm(forms.Form): 

    def clean(self): 
     session = get_current_session() 
     if self.cleaned_data.get('foo') == session.get('foo'): 
      # do something 
      pass 

     #... your code 
    pass