代码之家  ›  专栏  ›  技术社区  ›  Brant

django-访问请求.session格式

  •  6
  • Brant  · 技术社区  · 15 年前

    我按如下方式调用表单,然后将其传递到模板:

    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 回复  |  直到 8 年前
        1
  •  10
  •   Felix Kling    15 年前

    试试这个:

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

        2
  •  1
  •   9nix00    8 年前

    我很惊讶姜戈在形式上使用会话是如此困难。有时,我们真的需要将表单中的会话数据用于有效字段。

    我创建一个小项目可以解决这个问题。 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