我正在尝试创建一个基于 django 的餐厅订单管理系统
当有人点某种食物时,可能会点3个Pizza加2个三明治,如何让顾客定义每种产品的数量,然后计算其价格
class Restaurant(models.Model):
name = models.CharField(max_length=50)
price = models.PositiveIntegerField(default=1)
def __str__(self):
return self.name
class Topping(models.Model):
name = models.CharField(max_length=50)
product_names = models.ManyToManyField(Restaurant, blank=True)
quantity = models.PositiveIntegerField(default=1)
订单总价,例如一种产品:一份披萨加一份三明治,但他们订购了不止一份披萨和三明治
@property
def total(self):
return self.product_names.aggregate(Sum('price'))['price__sum']
我希望为每个选定的项目提供一个数量字段:披萨:3,三明治:2,然后计算它们(3*披萨价格,2*三明治价格)
最佳答案
您应该构造一个 through=...
model [Django-doc]在 ManyToManyField
[Django-doc] ,例如:
from django.db import models
from django.db.models import <b>F, Sum</b>
class Product(models.Model):
name = models.CharField(max_length=50)
price = models.PositiveIntegerField(default=1)
def __str__(self):
return self.name
class Order(models.Model):
name = models.CharField(max_length=50)
products = models.ManyToManyField(Product, <b>through='ProductOrder'</b>)
@property
def total(self):
return self.productorder_set.aggregate(
<b>price_sum=Sum(F('quantity') * F('product__price'))</b>
)['price_sum']
class <b>ProductOrder</b>(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
order = models.ForeignKey(Order, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
ProductOrder
因此是多对多关系中的一条记录,因此表示该 product
是该 order
的一部分> 具有给定的数量
。
然后我们可以使用 Sum(F('quantity') * F('product__price'))
计算总价,因此这些记录的数量之和乘以相关记录的价格产品。
关于python - 如何通过将新产品添加到 ManyToMany 字段来动态添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972613/