2010-03-03 45 views
6

我打電話形式如下,然後將它傳遞給一個模板:Django的 - 訪問的request.session形式

f = UserProfileConfig(request) 

我需要能夠到窗體中訪問的request.session ...所以首先我試過這個:

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) 

這並沒有工作,我收集,因爲當表單構造相比,設置用戶名charfield。

所以,下次我嘗試這樣做:

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 

無濟於事。

還有其他想法嗎?

回答

9

試試這個:

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']) 

我覺得這篇文章對dynamic forms非常有幫助。

+0

工作就像一個魅力! 非常感謝。一段時間以來一直在摔跤。 – Brant 2010-03-03 18:57:47

1

我很驚訝,Django在表單中使用會話非常困難。有時我們確實需要將表單中的會話數據用於有效的字段。

我創建的一個小項目可以解決這個問題。 django-account-helper

示例代碼:

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