Skip to main content
 首页 » 编程设计

python之Django 正确使用 Models.Cascade (on_delete)

2025年01月19日28arxive

我正在尝试研究 models.cascade 语句的正确用法。我有两个型号 Cart 和 Entry。如果我删除一个条目,删除不会在购物车条目上更新。我已经通过管理界面检查过了。我的 models.py 如下:

class Cart(models.Model): 
    user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE) 
    count = models.PositiveIntegerField(default=0) 
    total = models.DecimalField(default=0.00, max_digits=10, decimal_places=2) 
    updated = models.DateTimeField(auto_now=True) 
    timestamp = models.DateTimeField(auto_now_add=True) 
 
    objects = CartManager() 
 
    def __str__(self): 
        return "Cart:{} User:{} Items:{} Total:£{}".format(self.id, self.user, self.count, self.total) 
 
class Entry(models.Model): 
    product = models.ForeignKey(Product, null=True, on_delete=models.CASCADE) 
    cart = models.ForeignKey(Cart, null=True, on_delete=models.CASCADE) 
    quantity = models.PositiveIntegerField(default=0) 

请您参考如下方法:

我相信您对级联的概念倒置了。根据您的模型,当您针对外键关系在 Cart 上调用 delete 时,您的 Entry 将被删除。如果您希望删除操作反向进行,您需要添加一些额外的代码来处理它。你可以看看 Django cascade delete on reverse foreign keys有关如何实现它的一些想法(如果那是您需要的)。