我有两个名为GoodAtForm和的表格PaidForForm。这些工作如下…
GoodAtForm
PaidForForm
GoodAtForm从列表中获取输入request.session['love']并将其呈现给用户。
request.session['love']
然后,向用户显示一个CheckboXSelectMultiple字段,以便用户可以选择。
CheckboXSelectMultiple
在视图中提交表单后,用户选择将存储在另一个列表中request.session['good']。
request.session['good']
4.另一个名为的表单PaidForForm使用该列表进一步询问使用用户的问题,CheckBocSelectMultiple选择来自列表``request.session [‘good’]”。
CheckBocSelectMultiple
我的问题是我无法访问表单内的输出数据以提供查看。
初始化时输入工作正常。我的表单从给定的“爱”列表中呈现“复选框”,但问题是表单未提供输出。它说
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表单的第一个“位置”参数是请求数据,您已将其定义request为表单类的第一个参数,但正在request.POST视图中传递
request
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)