в форме отсутствует 1 требуемый позиционный аргумент: ‘запрос’

#python #django #django-forms

#python #django #django-forms

Вопрос:

я использовал тот же код для форм в предыдущих приложениях, но на этот раз, похоже, он не работает, миграции были выполнены, и я занимался этим целый день и не могу найти хорошего решения, почему эта форма не работает.

 def gst_form(request):
    if request.method == 'POST':
        form = gst_form(request.POST)

        if form.is_valid():
            form.save()
            return redirect("/")

        else:
            return HttpResponse("Details Invalid")  


    else:
        form = gst_form()
        
    context= {'form':form}

    return render(request, 'main/form.html', context)
 

Комментарии:

1. вы назвали свое представление так же, как и форму. Таким образом, вместо создания новой формы вы выполните рекурсивный вызов.

2. Пожалуйста, дайте вашему классу формы другое имя. Обычно это in PerlCase (not snake_case ) .

Ответ №1:

Похоже, вы указали как свое представление, так и свою форму gst_form в качестве имени. Таким образом, это означает, что при вызове gst_form вашего представления вы выполняете рекурсивный вызов функции представления, поэтому вы не создаете форму.

Простой способ решить эту проблему — переименовать вашу форму, например, в GstForm :

 class GstForm(forms.ModelForm):
    # … 

тогда больше не будет столкновения имен:

 from ….forms import GstForm

# …

def gst_form(request):
    if request.method == 'POST':
        form = GstForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')
    else:
        form = GstForm()
    context= { 'form': form }
    return render(request, 'main/form.html', context) 

Кроме того, это также соответствует рекомендациям по стилю PEP-0008:

Имена классов обычно должны использовать CapWords соглашение.

Комментарии:

1. Большое спасибо, чувак, я занимаюсь этим багом уже больше часа.