локальная переменная 'routingForm', на которую ссылается перед присваиванием - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь выполнить отправку формы, но получаю сообщение об ошибке "локальная переменная 'routingForm', на которую ссылается перед присваиванием". Пожалуйста, помогите мне решить эту проблему.

***** forms.py *** **

   from django import forms
   class routingForm(forms.Form):
   areaDigit = forms.CharField(label='areaDigit', max_length=100)
   product = forms.CharField(label='product', max_length=100)

***** views.py *****

from django.shortcuts import render
from .forms import routingForm

# Create your views here.
from django.http import HttpResponse,HttpResponseRedirect
from .models import Product,Routing_Dest_Area
def get_route_list(request):
     #areaDigit= request.POST.get('areaDigit', False)
    #data=Routing_Dest_Area.objects.filter(areaDigit_pk=request.POST['areaDigit'])
    if request.method == "POST":
        #Get the posted form
        routingForm = routingForm(request.POST)

        if routingForm.is_valid():
            areaDigit = routingForm.cleaned_data['areaDigit']
    else:
        MyLoginForm = routingForm()

    return render(request, 'routing/test.html',{'areaDigit':areaDigit})

***** home. html*****

<form method="POST" action="{% url 'get_route_list'%}" id="routingForm" name="routingForm">
            {% csrf_token %}
                <div class="form-content">
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                                <input type="text" class="form-control" placeholder="Area String *"  
                                 name"areaDigit" id="areaDigit" value="{{areaDigit}}"/>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-6">
                            <div class="form-group">
                            <label for="sel1">Select list (select one):</label>
                                 <select class="form-control" id="Product" name="product">
                                   <option> 1</option>
                                   <option> 21</option>
                                </select>
                            </div>
                        </div>
                    </div>
                    <button type="submit" class="btnSubmit">Submit</button>

Form data value in the network tab of inspect element

1 Ответ

2 голосов
/ 27 марта 2020

Вы не можете писать routingForm = routingForm(request.POST), так как это делает routingForm локальной переменной, и она используется до того, как она назначена.

Однако я настоятельно рекомендую вам написать RoutingForm в PerlCase , поэтому, начиная с заглавной буквы:

# app/forms.py

from django import forms

class <b>RoutingForm</b>(forms.Form):
    areaDigit = forms.CharField(label='areaDigit', max_length=100)
    product = forms.CharField(label='product', max_length=100)

Переменные в самой функции обычно записываются в snake_case. Итак, вид выглядит так:

# app/views.py

from django.shortcuts import render
from .forms import <b>RoutingForm</b>

from django.http import HttpResponse, HttpResponseRedirect
from .models import Product, Routing_Dest_Area


def get_route_list(request):
    areaDigit = None
    if request.method == 'POST':
        #Get the posted form
        <b>routing_form</b> = <b>RoutingForm</b>(request.POST)
        if <b>routing_form</b>.is_valid():
            areaDigit = <b>routing_form</b>.cleaned_data['areaDigit']
    else:
    return render(request, 'routing/test.html',{'areaDigit':areaDigit})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...