Django - 在表单中访问request.session

10 投票
3 回答
13681 浏览
提问于 2025-04-15 19:58

我正在以这种方式调用一个表单,然后把它传递给一个模板:

f = UserProfileConfig(request)

我需要在表单中访问请求的会话信息...所以我首先尝试了这个:

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

但还是没有效果。

还有其他的想法吗?

3 个回答

0

#在视图中

    form = MyForm(request.POST, request=request)

#在表单中

self.request = kwargs.pop('request', None)
if self.request:
    my_variable_value = self.request.session.get('VARIABLE_NAME')
    print("APPLICATION_ID",my_variable_value)
else:
   print("Not found",self.request)
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
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'])

我觉得这篇关于动态表单的文章非常有帮助。

撰写回答