你可以在两者之间建立一个模型,并将其用作
through=â¦
[Django-doc]
模型在这个模型中,我们使用
ForeignKey
到
Product
A.
外国钥匙
到
Cart
,以及
IntegerField
数量:
class Product(models.Model):
name = models.TextField()
description = models.TextField()
price = models.FloatField()
quantity = models.FloatField()
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
class Cart(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
products = models.ManyToManyField(
Product,
related_name='carts',
through='CartProduct'
)
class CartProduct(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
quantity = models.IntegerField(default=1)
class Meta:
constraints = [
models.UniqueField(fields=['product', 'cart'], name='unique_product_cart')
]
因此,您可以通过创建(或更新)
CartOrder
在给定的情况下
product
和
cart
.如果购物车和产品的组合已经存在,您可以增加其数量。
您还可以在
mycart.cardproduct_set.all()
queryset要获取数量,我们可以打印产品名称及其数量,例如:
mycart = … # some cart
for cartproduct in mycart.cartproduct_set.select_related('product'):
print(f'{cartproduct.product.name}: {cartproduct.quantity}')