Python 如何在Django中将两个模型字段相加
我正在创建一个电子商务网站,我现在正忙于购物车。目前我显示产品、数量和订单日期。我还想显示每个订单的订单总数 目前,我的模型如下所示: 型号.pyPython 如何在Django中将两个模型字段相加,python,django,django-models,Python,Django,Django Models,我正在创建一个电子商务网站,我现在正忙于购物车。目前我显示产品、数量和订单日期。我还想显示每个订单的订单总数 目前,我的模型如下所示: 型号.py class Store(models.Model): name = models.CharField(max_length=100) description = models.TextField(max_length=250) store_owner = models.ForeignKey(UserAccount, on_de
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)
如何将数量和价格相加,并将其分配给订单总额?我也不知道如何动态分配它,因为每个用户都有不同的总数
我已经看过了,但我不知道如何将它应用到我的模型中
有什么建议吗?您可以覆盖模型购物车中的“保存”方法
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)
您可以覆盖模型购物车中的保存方法
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)
你没有提到你在什么情况下需要这个,但我能想到的最简单的是:
# order is class 'Order'
order.order_total = order.product.price * order.quantity
order.save()
请注意,如果产品
、价格
或数量
中的任何一个为无
,则此操作将失败
如果您在
购物车
类中输入字段:
# cart is class 'Cart'
cart.order_total = sum(
order.order_total
for order in cart.order_set.all())
cart.save()
请注意,如果
order.order\u total
为None
您没有提到在哪种情况下需要它,但我能想到的最简单的方法是:
# order is class 'Order'
order.order_total = order.product.price * order.quantity
order.save()
请注意,如果产品
、价格
或数量
中的任何一个为无
,则此操作将失败
如果您在
购物车
类中输入字段:
# cart is class 'Cart'
cart.order_total = sum(
order.order_total
for order in cart.order_set.all())
cart.save()
请注意,如果order.order\u total
为None
,此操作也将失败