我想弄清楚如何乘以整数字段值的十进制字段值。Django整数和十进制字段乘法
这里是我的模型:
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”列,但出现以下错误:
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]))
确保我在保存模型之前正确投射表单值。我换了2号线在后保存功能:
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并不在于它是一个错误在它的结束。
不应该将总数转换为float而不是int吗? –
@ArgsKwargs:数量是可数的。 –
您的模式是否与您的模型相匹配? –