Django正确使用Models.Cascade(on_delete)

时间:2018-02-16 21:13:34

标签: python django django-models

我正在尝试使用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)

2 个答案:

答案 0 :(得分:1)

我相信你有自己的级联概念。根据您的模型,当您在Entry上为外键关系调用delete时,将删除Cart。如果你想要删除反向工作,你需要添加一些额外的代码来处理它。您可以查看Django cascade delete on reverse foreign keys有关如何实现该问题的一些想法(如果这是您需要的)。

答案 1 :(得分:0)

因为您没有关联条目购物车,只需设置Entry ForeignKey并使用on_delete。当您删除购物车时,与之关联的条目将被删除。