Django - 以表格形式访问request.session

时间:2010-03-03 18:24:02

标签: python django django-forms

我正在调用如下表单,然后将其传递给模板:

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)

这不起作用,我收集,因为与构建用户名字段相比,构建表单时。

所以,接下来我尝试了这个:

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

无济于事。

还有其他想法吗?

2 个答案:

答案 0 :(得分:10)

试试这个:

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的文章非常有帮助。

答案 1 :(得分: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