Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试在Django中分配clean_数据值时出现KeyError_Python_Html_Django_Django Forms - Fatal编程技术网

Python 尝试在Django中分配clean_数据值时出现KeyError

Python 尝试在Django中分配clean_数据值时出现KeyError,python,html,django,django-forms,Python,Html,Django,Django Forms,当我尝试分配表单时,我收到一个键错误。清除数据['value'] 我试图在Django web应用程序中编写一个利息计算器,它接受用户输入的初始资本年数和利率,并计算最终资本,但它返回一个关键错误。数据库是sqlite3 作为一名初学者,我们非常感谢您在解决方案和设计方面提供的任何帮助 这是回溯 回溯: 文件 “/Users/Andras/miniconda3/lib/python3.5/site packages/django/core/handlers/exception.py” 在内部 3

当我尝试分配
表单时,我收到一个键错误。清除数据['value']
我试图在Django web应用程序中编写一个利息计算器,它接受用户输入的初始资本年数和利率,并计算最终资本,但它返回一个关键错误。数据库是sqlite3

作为一名初学者,我们非常感谢您在解决方案和设计方面提供的任何帮助

这是回溯

回溯:

文件 “/Users/Andras/miniconda3/lib/python3.5/site packages/django/core/handlers/exception.py” 在内部 39响应=获取响应(请求)

文件 “/Users/Andras/miniconda3/lib/python3.5/site packages/django/core/handlers/base.py” 你得到了什么回应 187response=self.process\u异常\u由\u中间件(e,请求)

文件 “/Users/Andras/miniconda3/lib/python3.5/site packages/django/core/handlers/base.py” 你得到了什么回应 185响应=包装的回调(请求,*回调参数,**回调参数)

查询中的文件“/Users/Andras/myproject/myapp/views.py” 37初始值=表单。已清理的_数据['initial']

异常类型:在/query/Exception值处出现KeyError:“initial”

views.py

from django.shortcuts import redirect
from django.shortcuts import get_object_or_404, render
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.views import generic
from django.template.loader import get_template
from django.template import Context 
from django.views.generic.base import TemplateView 
from myapp.models import Queries
from django.core import serializers
import os, re, math
from django.template import Context
from django.views.generic import View
from django import forms
from myapp.forms import QueriesForm
import decimal
from django.http import Http404

def get_final(initial, rate, years):
    initial = self.initial
    rate = self.rate
    years = self.years
    calcInterest = (initial*(1+((rate/100)/12))^(12*years))
    final = calcInterest
    return final    


def query(request):
    if request.method == 'POST':

        form = QueriesForm(request.POST)

        if form.is_valid():

            initial = form.cleaned_data['initial']
            rate = form.cleaned_data['rate']
            years = form.cleaned_data['years']

            init1 = Queries.objects.get_initial()
            rate1 = Queries.objects.get_rate()
            years1 = Queries.objects.get_years()
            final1 = get_final(init1, rate1, years1)

            return render (request, 'result.html', {'cacl':final1})

        else:
        raise Http404
    else:

    form = QueriesForm()        

    return render(request, 'index.html', {'form': form})


def index(request):
    template_name = 'index.html'
    return render(request, "index.html", {})

def queries(request):
    template_name = 'queries.html'
    return render(request, "queries.html", {}) 

def result(request):
    template_name = 'result.html'
    return render(request, "result.html", {})
forms.py

from django import forms
from .models import Queries


class QueriesForm(forms.Form):


    initial = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
    years = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
    rate = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})

def clean_message(self):
    initial = self.cleaned_data.get("initial")
    years = self.cleaned_data.get("years")
    rate = self.cleaned_data.get("rate")


class Meta:

    model = Queries
    fields = ('initial', 'years', 'rate',)
models.py

from django.db import models
from django.forms import ModelForm

class Queries(models.Model):

    initial = models.DecimalField(max_digits=3, decimal_places = 2)
    years = models.DecimalField(max_digits=3, decimal_places = 2)
    rate = models.DecimalField(max_digits=3, decimal_places = 2)

def get_initial(self):
    return self.initial

def get_years(self):
    return self.years

def get_rate(self):
    return self.rate
url.py

from django.conf.urls import url
from . import views

app_name = 'myapp'
    urlpatterns = [
    url(r'^$', views.index, name = 'index'),
    url(r'^queries/', views.queries, name = 'queries'),
    url(r'^query/', views.query, name = 'query')

]   
index.html

{% load staticfiles %}
<!DOCTYPE html>
<head>
    <title>My Cool Savings Calculator</title>
<style>
 h1 {
  padding-bottom: 0em;
  margin-bottom: 0em;
}
table {
  padding-top: 0em;
  margin-top: 0em;
}
</style>
</head>
<body>
<h1>Savings Calculator</h1>

<table>
<form name = "form" action = "{% url 'myapp:query' %}" method='POST'>{% csrf_token %}
<tr>
      <td><label>Initial Capital:</label>

  <td><input type='number' name='initial'></input></td>

 </tr>
 <br>
 <tr>
  <td><label>Number of Years:</label>

  <td><input type='number' name='years' value='5'></input></td>

 </tr>
<br>
<tr>
  <td><label>Interest rate (annual):</label>

  <td><input type='number' name='rate' value='3.5'></input></td>

</tr>
<br>
<tr>
  <td></td>
  <td><input type='submit'></input></td>
</tr>
</form>
 </table>
{% block content %}
{% endblock %}

<h3>Check previous queries <a href='/queries'>here</a></h3>
</body>
{%load staticfiles%}
我的酷储蓄计算器
h1{
填充底部:0em;
边缘底部:0em;
}
桌子{
填充顶部:0em;
页边顶部:0em;
}
储蓄计算器
{%csrf_令牌%}
初始资本:

年数:
利率(年利率):
{%block content%} {%endblock%} 检查以前的查询
results.html

{% extends 'index.html' %}

{% block content %}


<h2>{{calc}}</h2>

{% endblock %}
{%extends'index.html%}
{%block content%}
{{calc}}
{%endblock%}

您的attrs参数中有输入错误,这可能是导致此问题的原因

尝试更改以下三行:

initial = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
years = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
rate = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
为此:

initial = forms.NumberInput(attrs={'max_length':10, 'required':True})
years = forms.NumberInput(attrs={'max_length':10, 'required':True})
rate = forms.NumberInput(attrs={'max_length':10, 'required':True})

您的attrs参数中有输入错误,这可能是导致此问题的原因

尝试更改以下三行:

initial = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
years = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
rate = forms.NumberInput(attrs={'max_lenght':10, 'requred':True})
为此:

initial = forms.NumberInput(attrs={'max_length':10, 'required':True})
years = forms.NumberInput(attrs={'max_length':10, 'required':True})
rate = forms.NumberInput(attrs={'max_length':10, 'required':True})

如前所述,您可能希望更正表单字段中的max_length和required的拼写

然后,我还认为您需要实际输出表单,而不是像您所做的那样输出常规html输入

<form action="{% url 'myapp:query' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

如前所述,您可能希望更正表单字段中的max_length和required的拼写

然后,我还认为您需要实际输出表单,而不是像您所做的那样输出常规html输入

<form action="{% url 'myapp:query' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

谢谢你们的答案,在更正错误并使用表格后,最终找出了问题所在:)谢谢你们的答案,在更正错误并使用表格后,最终找出了问题所在:)