【发布时间】:2017-06-17 15:01:54
【问题描述】:
当我尝试分配 form.clean_data['value'] 时收到 KeyError
我正在尝试在 Django Web 应用程序中编写一个利息计算器脚本,它接受用户输入的初始资本年份和利率并计算最终资本,但是它返回一个关键错误。数据库是 sqlite3。
感谢您在解决方案和设计方面的任何帮助,无论是初学者还是所有人..
这是回溯
追溯:
文件 “/Users/Andras/miniconda3/lib/python3.5/site-packages/django/core/handlers/exception.py” 在内部 39. response = get_response(request)
文件 “/Users/Andras/miniconda3/lib/python3.5/site-packages/django/core/handlers/base.py” 在 _get_response 187. response = self.process_exception_by_middleware(e, request)
文件 “/Users/Andras/miniconda3/lib/python3.5/site-packages/django/core/handlers/base.py” 在 _get_response 185. response = Wrapped_callback(request, *callback_args, **callback_kwargs)
查询中的文件“/Users/Andras/myproject/myapp/views.py” 37. 初始 = form.cleaned_data['initial']
异常类型:KeyError at /query/ 异常值:'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
urls.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>
结果.html
{% extends 'index.html' %}
{% block content %}
<h2>{{calc}}</h2>
{% endblock %}
【问题讨论】:
标签: python html django django-forms