在表单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/')
答案 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/')