Django - 在表单中访问request.session
我正在以这种方式调用一个表单,然后把它传递给一个模板:
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'])
我觉得这篇关于动态表单的文章非常有帮助。