2017-07-10 7 views
0

Ich versuche, eine django Formulardaten zu packen und anzuzeigen, die durch POST-Anforderung comping, aber ich bin für ein mein Feldnamen gehen auf KeyError stecken,KeyError bei/Docker/Auth/django 1.11 Formen

hier ist der Fehler:

KeyError at /docker/auth/ 
'docker_name' 
Request Method: POST 
Request URL: http://127.0.0.1:8000/docker/auth/ 
Django Version: 1.11.3 
Exception Type: KeyError 
Exception Value:  
'docker_name' 
Exception Location: /Users/abdul/Documents/IGui/dockerDep/views.py in post, line 21 
Python Executable: /Users/abdul/IstioVirEnv/bin/python 
Python Version: 3.6.1 

hier ist mein models.py:

from django.db import models 

class DockerAuth(models.Model): 
    docker_name = models.CharField(max_length=255) 
    docker_pass = models.CharField(max_length=255) 

hier ist mein forms.py:

from django.forms import forms 
from .import models 

class DockerAuthForm(forms.Form): 
    class Meta: 
     fields = ('docker_name', 'docker_pass') 
     model = models.DockerAuth 

Hier ist mein views.py:

from django.shortcuts import render 
from django.views.generic import CreateView 
from . import forms 


class DockerAuth(CreateView): 
form_class = forms.DockerAuthForm 

def get(self, request, *args, **kwargs): 
    return render(request, 'dockerDep/docker_login.html', {}) 

def post(self, request, *args, **kwargs): 
    lform = forms.DockerAuthForm(request.POST) 
    context = {} 
    if lform.is_valid(): 
     data = lform.cleaned_data 
     name = data['docker_name'] 
     password = data['docker_pass'] 
     context = { 
      "form": lform, 
      "uname": name, 
      "upass": password 
     } 
    return render(request, 'dockerDep/response.html', context) 

Hier ist meine HTML-Template-Form:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>DOCKER</title> 
</head> 
<body> 
    <form method="post" action="."> 
     {% csrf_token %} 
     <input type="text" name="docker_name" title="Name"> 
     <input type="password" name="docker_pass" title="Password">. 
     <input type="submit" value="Submit"/> 
    </form> 
</body> 
</html> 
+0

Können zeigen Sie das Modell? –

+0

Es macht keinen Sinn, 'CreateView' zu verwenden, wenn Sie' get' und 'post' außer Kraft setzen. Sie verlieren alle Funktionen der Ansicht. In jedem Fall ist es verwirrend, CreateView zu verwenden, wenn Sie nichts erstellen. Es wäre besser, ['FormView'] (https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#formview) abzuleiten und' form_valid' zu überschreiben. Oder, wenn Sie 'get' und' post' definieren wollen, einfach Unterklasse 'View'. – Alasdair

Antwort

0

ein ModelForm Verwendung soll die KeyError beheben. In forms.py:

  • ändern from django.forms import forms zu from django import forms
  • ändern class DockerAuthForm(forms.Form) zu class DockerAuthForm(forms.ModelForm)
+0

danke, es hat funktioniert! –

+0

@AbdulRehman Wenn diese Antwort oder eine andere Lösung Ihr Problem gelöst hat, markieren Sie es bitte als akzeptiert –