我试图弄清楚如何将十进制字段值乘以整数字段值。
这是我的模型:
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 并不是说它结束时是一个错误。