[英]Django Integer and Decimal field multiplication
我试图弄清楚如何将十进制字段值乘以整数字段值。
这是我的模型:
class OrderItem(models.Model):
order = models.ForeignKey(Order, editable=False)
product = models.ForeignKey('products.Product')
qty = models.IntegerField()
original_price = models.DecimalField(max_digits=20, decimal_places=2)
sale_price = models.DecimalField(max_digits=20, decimal_places=2)
tax = models.DecimalField(max_digits=20, decimal_places=2)
total = models.DecimalField(max_digits=2, decimal_places=2, null=True, blank=True, editable=False)
total_tax = models.DecimalField(max_digits=2, decimal_places=2, null=True, blank=True, editable=False)
picked = models.IntegerField(null=True, blank=True)
user = models.ForeignKey('auth.User', editable=False)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
我正在尝试将“ sale_price”列乘以“ qty”列,但出现以下错误:
Invalid literal for Decimal: u'180.00180.00'
使用此代码:
def orderItemPs(sender, instance=False, **kwargs):
#figure out the total
instance.total = decimal.Decimal(int(instance.qty) * instance.sale_price)
instance.total_tax = decimal.Decimal(int(instance.qty) * instance.tax)
#disconnect
post_save.disconnect(orderItemPs, sender=OrderItem)
instance.save()
#reconnect
post_save.connect(orderItemPs, sender=OrderItem)
我不确定自己在做什么错。
干杯,Sn0rcha!
更新:更多信息。
我将触发post_save函数的代码更改为以下代码。
order_item = OrderItem(order=form, product=Product.objects.get(pk=products[i]), qty=int(qtys[i]), original_price=decimal.Decimal(original_prices[i]), tax=decimal.Decimal(taxs[i]), user=request.user, sale_price=decimal.Decimal(sale_prices[i]))
以确保在保存模型之前正确投射了表单值。 我将帖子保存功能中的两行更改为:
instance.total = decimal.Decimal(instance.qty * instance.sale_price)
instance.total_tax = decimal.Decimal(instance.qty * instance.tax)
但是现在我得到了错误:
quantize result has too many digits for current context
我使用的是POSTGres,并不是说这是一个错误。
我猜int(instance.qty)
是2
,而instance.sale_price
是'180.00'
一个字符串,而不是一个数值,当它乘以2时,只会复制该字符串:
>>> decimal.Decimal(2 * '180.00')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/decimal.py", line 548, in __new__
"Invalid literal for Decimal: %r" % value)
File "/Library/Frameworks/EPD64.framework/Versions/7.2/lib/python2.7/decimal.py", line 3844, in _raise_error
raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: '180.00180.00'
如何设置sale_price
? 我希望Django将其强制转换为Decimal,但是是否有可能以某种方式将其存储为字符串?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.