小数フィールド値を整数フィールド値で乗算する方法を見つけようとしています。
これが私のモデルです:
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]))
モデルを保存する前に、フォームの値を正しくキャストしていることを確認します。保存後の関数の 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を使用していますが、それが最後にエラーであるというわけではありません。