我正在尝试将表单的输入传递给我的模型方法,以便基于我的模型字段数据库值进行一些计算。
我知道我可以使用自定义标签过滤器来做到这一点,但这效率不高,因为以后需要进行复杂的计算。 我读过某个地方,在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 %}
答案 0 :(得分:0)
这是因为您没有为新的“产品实例”价格属性分配值。因此它的默认值为None
。您可能应该在创建产品时设置价格。例如:p = Product(price=42)