我有一个名为“ CarAdd”的模型,另外两个模型通过外键连接到该CarAdd模型,分别是ShippingDetails,MaintenanceDetails。并且每个外键模型都有一个项目和价格字段。“外键在一个id下有两个以上的项目”
我需要找到每辆车的利润额
profit = sold_amount - (purchased amount + total shipping cost + total maintenance cost)
class CarAdd(models.Model):
# Car Details
name = models.CharField(max_length=60)
purchased_amount = models.DecimalField()
# there 3 choices in STATUS shipped, maintenance, sold
status = models.CharField(max_length=12, choices=STATUS)
sold_amount = models.DecimalField(max_digits=15, decimal_places=1)
profit_amount = models.DecimalField(max_digits=15, decimal_places=1)
def save(self, *args, **kwargs):
if self.status == 'sold':
sum_invested = self.purchased_amount + ShippingDetails.price + MaintenanceDetails.price
profit = self.sold_amount - sum_invested
self.profit_amount = profit
super().save(*args, **kwargs)
class ShippingDetails(models.Model):
car = models.ForeignKey(CarAdd, related_name='shipping_details', on_delete=models.CASCADE)
item = models.CharField(max_length=60)
price = models.DecimalField(max_digits=15, decimal_places=1,)
class MaintenanceDetails(models.Model):
car = models.ForeignKey(CarAdd, related_name='maintenance_details', on_delete=models.CASCADE)
item = models.CharField(max_length=60)
price = models.DecimalField(max_digits=15, decimal_places=1)
如果状态为“已售出”,如何计算利润金额并保存到Profit_amount字段
答案 0 :(得分:0)
您需要汇总相关模型:
from django.db.models import Sum
from django.db.models.functions import Coalesce
sum_invested = self.purchased_amount
+ self.shipping_details.aggregate(total_price=Coalesce(Sum('price'), 0))['total_price']
+ self.maintenance_details.aggregate(total_price=Coalesce(Sum('price'), 0))['total_price']