繁体   English   中英

Django Integer和Decimal字段乘法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM