我已经更新了我的代码示例,因为它与我的真实代码有一些细微的不一致
我的代码遇到了菜鸟问题。 这是一个简单的乘法器功能,如下所示:
1 /模型
1.a /具有2个字段:名称为CharField,价格为Decimalfield
1.b /的方法乘数基本上是newprice = self.price * arg
2 /表格 捕获输入(将self.price与之相乘的值)
3 /用于传递带有表单和上下文的模板的视图
我一直遇到无法用'NoneType'类型或TypeError类型的非整数乘以序列的问题:不支持的操作数类型错误。
我尝试更新代码以更改对象的类型或模型字段等,但是找不到有效的解决方案...
btw:如果模型方法的参数用常量替换,则一切都会正常工作
型号
class Product(models.Model):
name = models.CharField(max_length=30)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.name
def multi(self, n):
np = self.price * n
return np
表格
class Input(forms.Form):
data = forms.DecimalField(max_digits=5, decimal_places=2)
查看
from django.shortcuts import render
from .models import Product
from .forms import Input
from decimal import Decimal
def index(request):
list = Product.objects.all()
value = 1
if request.method == "POST":
form = Input(request.POST or None)
if form.is_valid():
value = request.POST.get('data')
##what shoud I do here
Product.multi(value) ##Is this correct ??
else:
form = Input(request.POST or None)
return render(request , 'multi/index.html', {'form' : form, 'list' : list, 'value' : value} )
模板
{% block content %}
<h2>New price</h2>
<form method="POST" class="price-form" name="data">
{% csrf_token %}
{{ form }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
<br>
{{ value }}
<br><br>
{% for list in list %}
<div>
{{ list.name }} {{ list.price }} {{ list.multi }} </div>
{% endfor %}