/ addData /'user'处的KeyError

时间:2019-03-13 21:15:54

标签: django

在表单POST操作上获取此KeyError。我在这里试图做的是我的用户有列表,他们可以在这些列表中添加数字值。在这里,我试图在我的表单中调用所有特定的用户列表,用户可以在其中为其添加值的用户选择自己的列表。

表格:

class data_form(forms.Form):
    selection = forms.ModelChoiceField(queryset=None)
    data = forms.IntegerField()

def __init__(self, *args, **kwargs):
    user = kwargs.pop("user")
    super(data_form, self).__init__(*args, **kwargs)
    self.fields['selection'].queryset = List.objects.filter(user=user)

视图,第一个用于处理主页,第二个用于添加数据

@login_required
def app(request):
    form = list_form
    form2 = data_form(user=request.user)
    user = request.user.pk
    user_lists = List.objects.filter(user=user)

    list_data = {}
    for list in user_lists:
        list_data[list.name] = DataItem.objects.filter(list=list)

    context = {'user_lists': user_lists, 'form': form, 'form2': form2, 'list_data': list_data}

    return render(request, 'FitApp/app.html', context)

@require_POST
def addData(request):
    form = data_form(request.POST)
    if form.is_valid():
        new_data = DataItem(data=request.POST['data'], list=List.objects.get(id=request.POST['selection'])) 
        new_data.save()

     return redirect('/app/')

1 个答案:

答案 0 :(得分:0)

您忘记了将用户实例传递给表单。同样,您不应该直接访问POST数据,请使用cleaned_data形式。而且由于选择是ModelChoiceField,因此您获得的所选实例已经不是ID,因此无需进行查询。

@require_POST
def addData(request):
    form = data_form(request.POST, user=request.user)
    if form.is_valid():
        cd = form.cleaned_data
        new_data = DataItem(data=cd['data'], list=cd['selection']) 
        new_data.save()

     return redirect('/app/')