我无法在Django中乘以两个IntegerField的值。我是Django的新手,所以我可能错过了一些明显的东西。 这是我得到的错误:
NameError at /multiplication/multiplied
name 'multiply_two_integers' is not defined
Request Method: POST
Request URL: http://127.0.0.1:8000/multiplication/multiplied
Django Version: 2.0.1
Exception Type: NameError
Exception Value:
name 'multiply_two_integers' is not defined
这是我的代码:
from django import forms
class HomeForm(forms.Form):
quantity1 = forms.IntegerField(required = False)
quantity2 = forms.IntegerField(required = False)
def multiply_two_integers(x,y):
return x*y
def return_product(self):
return multiply_two_integers(quantity1,quantity2)
并且:
from django.shortcuts import render,get_object_or_404
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.views.generic import TemplateView
from multiplication.forms import HomeForm
# Create your views here.
# def startPage(request):
# return render(request, 'multiplication/detail.html')
template_name1 = 'multiplication/detail.html'
template_name2 = 'multiplication/multiplied.html'
def get(request):
form = HomeForm()
return render(request,template_name1,{'form': form} )
def post(request):
form = HomeForm(request.POST)
if (form.is_valid()):
product = form.return_product()
return render(request, template_name2, {'form': form,
'product': product })
和template_name1:
<h1>Multiplication Function</h1>
<form action = "{% url 'multiplication:post' %}" method = "post">
{{ form.as_p }}
{% csrf_token %}
<input type = "submit" value ="Multiply">
<!--<button type="submit"> Multiply </button>-->
<h1>{{product}}</h1>
</form>
template_name2:
<h1>{{product}}</h1>
答案 0 :(得分:1)
这不像Django错误,这是一个基本的Python OOP错误!! 在Python类方法(非静态)中,您必须将第一个参数调用为 self 。所以在forms.py。
中from django import forms
class HomeForm(forms.Form):
quantity1 = forms.IntegerField(required = False)
quantity2 = forms.IntegerField(required = False)
def multiply_two_integers(self, x, y):
return x*y
def return_product(self):
return self.multiply_two_integers(self.quantity1, self.quantity2)
或者您也可以通过简单地修饰此方法将 multiply_two_integers 设为静态方法
from django import forms
class HomeForm(forms.Form):
quantity1 = forms.IntegerField(required = False)
quantity2 = forms.IntegerField(required = False)
@staticmethod
def multiply_two_integers(x, y):
return x*y
def return_product(self):
return self.multiply_two_integers(self.quantity1, self.quantity2)
此外,我想建议,不要在表单中制作这些方法(multiply_two_integers和return_product),而是在视图中制作这些表单。只需按request.POST['field']
答案 1 :(得分:0)
您忘记了self
:
def return_product(self):
return self.multiply_two_integers(quantity1, quantity2)