2016-08-09 92 views
0

Ich habe ein [scheinbar] einfaches Formular für Kunden erstellt, jedoch nachdem der Benutzer das Formular übermittelt, wenn ich versuche, die Antwort zu überprüfen m- ich erhalte:Django: "Anfrage" enthält nicht die "Methode" (POST/GET)

Ausnahmetyp: Attribute Ausnahmewert: ‚QueryDict‘ Objekt hat kein Attribut ‚Methode‘

wenn ich checkte ich sah, dass die Anforderungsobjekte enthält nur die Daten, im Formular eingereicht und enthält nicht das Attribut "method"

Dies ist die Funktion, die von der Form verwendet wird:

def institutionapply(request): 
    print(request) 
    print("request: ",request) 
    a=get_ip(request) 
    print (a) 
    country=get_country(request) 
    # if this is a POST request we need to process the form data 

    if request.method == 'POST': 
     # create a form instance and populate it with data from the request: 
     form = institutionapply(request.POST) 
     print ("form in post clause:",form) 
     #print ("duration output:",form.duration) 
     # check whether it's valid: 
     if form.is_valid(): 
      print ("print form is valid") 
      print (form.cleaned_data['title']) 
      print (form.cleaned_data['country']) 

      # process the data in form.cleaned_data as required 
      # ... 
      # redirect to a new URL: 
      #return HttpResponseRedirect('/thanks/') 
      #return redirect(name='home') 
    # if a GET (or any other method) we'll create a blank form 
    else: 
     # create a form instance and populate it with data from the request: 
     data = {'title': '', 'first': '', 'last':'', 'country':'','internationalprefix':'','phone':'','email':'','institutionname':'','institutionurl':'',} 
     form = institutionform(data) 
    return render(request,'app/intitutionapply.html', {'form': form}) 

irgendwelche Ideen, warum die „Methode“ Objekt nirgends zu finden ist?

EDIT: url Konfiguration:

urlpatterns = [ 
    url(r'^$', views.home, name='home'), 
    url(r'^InstitutionApply$', views.institutionapply, name='institutionapply'), 
    url(r'^contact$', views.contact, name='contact'), 
    url(r'^about', views.about, name='about'), 
    url(r'^admin/', admin.site.urls), 

aus dem HTML-Template, das Formular Erklärung:

die Funktionen von views.py

def get_country(request): 
    a=get_ip(request) 
    country='United States' 
    g = GeoIP2(path='D:/newTelumis/newTelumis/GeoLite2-Country.mmdb') 
    return country 



def get_ip(request): 
    try: 
     x_forward= request.META.get("HTTP_X_FORWARD_FOR") 
     if x_forward: 
      ip=x_forward.split(",")[0] 
     else: 
      ip=request.META.get("REMOTE_ADDR") 
    except: 
     ip="" 
    return ip 
+1

Was zeigen die Druckanweisungen? Und wird diese Funktion direkt von einer URL aufgerufen? –

+0

Verändern 'get_ip' oder' get_country' die Anfrage? – Sayse

+0

@DanielRoseman Der Druck zeigt: Anfrage: das Formular ist auf die gleiche URL (wenn das ist, was Sie gemeint haben) – Dror

Antwort

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

Ersetzen Sie institutionapply durch institutionform.

+1

Well spotted zu erstellen. Das Problem besteht darin, dass die Ansicht rekursiv aufgerufen wurde. –

+0

vs.sdanilov Sie sind ein Gentleman und ein Gelehrter – Dror