【问题标题】:Django Correct Usage of Models.Cascade (on_delete)Django 正确使用 Models.Cascade (on_delete)
【发布时间】:2018-07-27 20:17:07
【问题描述】:

我正在尝试研究 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)

【问题讨论】:

标签: python django django-models


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    因为您没有关联 EntryCart,所以只需设置 Entry ForeignKey 并使用 on_delete。当你删除一个购物车的时候,与之关联的Entry也会被删除。

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 1970-01-01
      • 2017-06-22
      • 2020-07-10
      • 2016-06-17
      • 2020-11-08
      • 2019-06-11
      • 2020-02-12
      • 2022-12-31
      相关资源
      最近更新 更多