乘以两个django整数字段的值

时间:2018-01-31 18:49:58

标签: python django user-interface

我无法在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>

2 个答案:

答案 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)