我的表单正在将NoneType值传递给我的模型方法计算,我是否缺少实例化?

时间:2019-04-14 15:26:06

标签: python django

我正在尝试将表单的输入传递给我的模型方法,以便基于我的模型字段数据库值进行一些计算。

我知道我可以使用自定义标签过滤器来做到这一点,但这效率不高,因为以后需要进行复杂的计算。 我读过某个地方,在Django中,您无法将参数传递给模型,但这听起来很愚蠢……

我在某处缺少实例吗?

当我在表单中保存新值时的错误是:

np = self.price *值 *:'NoneType'和'int'不受支持的操作数类型
所以它是相关的

这也非常令人困惑,因为如果我在方法中设置默认值,则计算可以在模板中很好地呈现。

我非常感谢您的帮助

型号


class Product(models.Model):
    sku = models.CharField(max_length=30)
    price = models.FloatField()

    def __str__(self):
        return self.sku

    def multi(self, value = 2):  #THIS DEFAULT '2' IS PROCESSED BY THE METHOD
        np = self.price * value  #AND RENDERS A NP VALUE IN THE TEMPLATE
        return np

查看

from .models import Product
from .forms import Input

def index(request):
    list = Product.objects.all()
    value = 0   #just to check

    if request.method == "POST":
        form = Input(request.POST or None)

        if form.is_valid():
            value = request.POST.get('data')
            value = form.cleaned_data.get('data')

            p = Product()   # IS THIS EVEN THE CORRECT SPOT THE CODE ???
            p.multi(value)   


    else:
        form = Input(request.POST or None)


    return render(request , 'multi/index.html', {'form' : form, 'list' : list, 'value' : value } )

模板

{{ value }}

 {% for item in list %}  

        {{ item.sku }}  {{ item.price }} {{item.multi}} 

{% endfor %}

1 个答案:

答案 0 :(得分:0)

这是因为您没有为新的“产品实例”价格属性分配值。因此它的默认值为None。您可能应该在创建产品时设置价格。例如:p = Product(price=42)