在表单内访问 request.session['key'] 时出错。 [使用 CheckboxSelectMultiple]
Error while accessing request.session['key'] inside forms. [using CheckboxSelectMultiple]
我有两个表格 GoodAtForm
和 PaidForForm
。这些的作用如下...
GoodAtForm
从 request.session['love']
中的列表中获取输入并将其呈现给用户。
然后向用户显示 CheckboXSelectMultiple
字段,以便用户可以 select.
在视图中提交表单后,用户选择将存储在另一个列表中 request.session['good']
。
4.Another 名为 PaidForForm
的表单使用该列表进一步询问使用 CheckBocSelectMultiple
的用户的问题,select 离子来自列表```request.session['good']。
我的问题是我无法访问表单内的输出数据以供查看。
输入在初始化时工作正常。我的表单从给定的 LOVE 列表中呈现复选框,但问题是表单未提供输出。它说
form = GoodAtForm(request.POST)
input_list = request.session['love']
'QueryDict' object has no attribute 'session'
这是我的GoodAtForm
class GoodAtForm(forms.Form):
def __init__(self, request, *args, **kwargs):
super(GoodAtForm, self).__init__(*args, **kwargs)
input_list = request.session['love']
self.fields['good'] = forms.MultipleChoiceField(
label="Select Things You are Good At",
choices=[(c, c) for c in input_list],
widget=forms.CheckboxSelectMultiple
)
查看 GoodAtForm
def show_good_at(request):
if request.method == 'POST':
form = GoodAtForm(request.POST) #it is showing problem here. Throws an exception here
if form.is_valid():
if not request.session.get('good'):
request.session['good'] = []
request.session['good'] = form.cleaned_data['good']
return redirect('paid_for')
else:
form = GoodAtForm(request=request) #rendering form as usual from the list 'love'
return render(request, 'good_at_form.html', {'form':form})
通常传递给 Django 表单的第一个 "positional" 参数是请求数据,您已将 request
定义为表单 class 的第一个参数但是正在传递 request.POST
在您看来
每次实例化表单时,您都需要将请求作为第一个参数传递
form = GoodForm(request, request.POST)
或将请求更改为关键字参数
class GoodAtForm(forms.Form):
def __init__(self, *args, request=None, **kwargs):
super().__init__(*args, **kwargs)
...
form = GoodForm(request.POST, request=request)
我有两个表格 GoodAtForm
和 PaidForForm
。这些的作用如下...
GoodAtForm
从request.session['love']
中的列表中获取输入并将其呈现给用户。然后向用户显示
CheckboXSelectMultiple
字段,以便用户可以 select.在视图中提交表单后,用户选择将存储在另一个列表中
request.session['good']
。
4.Another 名为 PaidForForm
的表单使用该列表进一步询问使用 CheckBocSelectMultiple
的用户的问题,select 离子来自列表```request.session['good']。
我的问题是我无法访问表单内的输出数据以供查看。
输入在初始化时工作正常。我的表单从给定的 LOVE 列表中呈现复选框,但问题是表单未提供输出。它说
form = GoodAtForm(request.POST)
input_list = request.session['love']
'QueryDict' object has no attribute 'session'
这是我的GoodAtForm
class GoodAtForm(forms.Form):
def __init__(self, request, *args, **kwargs):
super(GoodAtForm, self).__init__(*args, **kwargs)
input_list = request.session['love']
self.fields['good'] = forms.MultipleChoiceField(
label="Select Things You are Good At",
choices=[(c, c) for c in input_list],
widget=forms.CheckboxSelectMultiple
)
查看 GoodAtForm
def show_good_at(request):
if request.method == 'POST':
form = GoodAtForm(request.POST) #it is showing problem here. Throws an exception here
if form.is_valid():
if not request.session.get('good'):
request.session['good'] = []
request.session['good'] = form.cleaned_data['good']
return redirect('paid_for')
else:
form = GoodAtForm(request=request) #rendering form as usual from the list 'love'
return render(request, 'good_at_form.html', {'form':form})
通常传递给 Django 表单的第一个 "positional" 参数是请求数据,您已将 request
定义为表单 class 的第一个参数但是正在传递 request.POST
在您看来
每次实例化表单时,您都需要将请求作为第一个参数传递
form = GoodForm(request, request.POST)
或将请求更改为关键字参数
class GoodAtForm(forms.Form):
def __init__(self, *args, request=None, **kwargs):
super().__init__(*args, **kwargs)
...
form = GoodForm(request.POST, request=request)