python - 如何在 Django 中将两个模型字段相加
问题描述
我正在创建一个电子商务网站,目前我正忙于购物车。目前我显示产品、数量和订单日期。我还想显示每个订单的订单总额。
目前我的模型如下所示:
模型.py
class Store(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(max_length=250)
store_owner = models.ForeignKey(UserAccount, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Product(models.Model):
product_name = models.CharField(max_length=100)
price = models.IntegerField(null=True, blank=True)
description = models.TextField(max_length=250)
store = models.ForeignKey(Store, on_delete=models.CASCADE)
def __str__(self):
return self.product_name
class Cart(models.Model):
user = models.ForeignKey(UserAccount, on_delete=models.CASCADE)
order_total = models.IntegerField(null=True, blank=True)
checked_out = models.BooleanField(default=False)
def __str__(self):
return str(self.user)
class Order(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField(null=True, blank=True)
cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
order_date = models.DateTimeField(auto_now=True)
order_total = models.IntegerField(null=True, blank=True)
def __str__(self):
return "{} order".format(self.product)
如何将数量和价格加在一起并将其分配给 order_total?我也无法弄清楚如何动态分配它,因为每个用户会有不同的总数。
我看过Django: Calculate the Sum of the column values through query但我不知道如何将它应用到我的模型中。
有什么建议么?
解决方案
您可以覆盖模型购物车中的保存方法。
def save(self, *args, **kwargs):
if not self.id:
super(Model, self).save(*args, **kwargs)
else:
total = 0.0 # should be DecimalField not integer or float for prices
for item in Order.objects.filter(cart=self.id):
total += (item.quantity * item.product.price)
self.order_total = total # again this should be changed to DecimalField
super(Model, self).save(*args, **kwargs)
或者如果您将我们的外键作为产品的价格,则此查询可能会起作用
def save(self, *args, **kwargs):
if not self.id:
super(Model, self).save(*args, **kwargs)
else:
total = Order.objects.filter(cart=self.id).aggregate(
total=Sum('price', field="price*quantity")
)['total']
self.order_total = total
super(Model, self).save(*args, **kwargs)
推荐阅读
- opengl - 渲染不同于单遍渲染
- linux - 在运行时确定 const char* 变量是否是字符串文字?
- javascript - 使用 D3 或 javascript 通过拖放在链接中创建弯曲点
- android - 使用 RxJava2 和 MutableLiveData 进行单元测试
- javascript - 使用 React 进行输入屏蔽
- python - 在 pycharm 调试器中,如何摆脱 lambda 函数?
- ios - 如何在通知服务扩展中检测主机应用程序状态?
- c - memset() 3D 数组中的错误
- java - Canvas.drawBitmap 定位参数
- java - Oob Paring - 怎么做?