KeyError в / addData / 'user' - PullRequest
       7

KeyError в / addData / 'user'

0 голосов
/ 14 марта 2019

Получение этого KeyError в действии POST формы. Что я пытаюсь сделать здесь, так это то, что у моих пользователей есть списки, и в эти списки они могут добавлять числовые значения. Здесь я пытаюсь вызвать все определенные списки пользователей в мою форму, где пользователь может выбрать, для какого из его / ее списка они хотят добавить значение.

Форма:

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 голосов
/ 14 марта 2019

Вы забыли передать пользовательский экземпляр в вашу форму.Также вам не следует обращаться к данным POST напрямую, используйте форму cleaned_data.А так как выбор - это ModelChoiceField, вы получаете уже выбранный экземпляр, а не идентификатор, поэтому нет необходимости делать запрос.

@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/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...