访问时出错请求会话['key']在表单中。[使用复选框选择多个]

2024-04-20 08:12:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种形式,分别是GoodAtFormPaidForForm。它们的作用如下。。。你知道吗

  1. GoodAtFormrequest.session['love']中的列表中获取输入并将其呈现给用户。

  2. 然后给用户一个CheckboXSelectMultiple字段,以便用户选择。

  3. 在视图中提交表单后,用户选择将存储在另一个列表request.session['good']中。

4.另一个名为PaidForForm的表单使用该列表进一步询问使用CheckBocSelectMultiple的用户的问题,并从列表中进行选择```请求会话[“好”]。你知道吗

我的问题是,我无法访问表单中的输出数据以供查看。你知道吗

输入初始化时工作正常。我的表单呈现来自给定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
        )

查看货物平台

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})

Tags: 用户selfform表单列表inputifrequest
1条回答
网友
1楼 · 发布于 2024-04-20 08:12:27

通常传递给Django表单的第一个“位置”参数是请求数据,您已经将request定义为表单类的第一个参数,但是在视图中传递了request.POST

或者每次实例化表单时都需要将request作为第一个参数传递

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)

相关问题 更多 >