当前位置: 首页 > 知识库问答 >
问题:

Django正确使用Models.Cascade(删除时)

司徒俊健
2023-03-14

我正在努力研究models.cascade语句的正确用法。我有两种型号的购物车和入门车。如果删除条目,则不会更新购物车条目上的删除。我已经通过管理界面检查过了。我的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个答案

唐声
2023-03-14

因为您没有将Entry和Cart关联起来,所以只需设置Entry ForeignKey并在删除时使用即可。在删除购物车时,将删除与其关联的条目。

江恩
2023-03-14

我相信你们的级联概念是反向的。根据您的型号,在外键关系的购物车上调用delete时,您的条目将被删除。如果您想让删除反向工作,则需要添加一些额外的代码来处理。您可以查看Django cascade delete on reverse foreign Key,了解如何实现它(如果您需要的话)。

 类似资料:
  • 对于类中的方法,文档是这样说的: 取消此对话框,将其从屏幕上移除。可以从任何线程安全地调用此方法。请注意,当对话框被取消时,不应重写此方法来进行清理,而应在中实现此方法。 在我的代码中,我所做的就是调用来删除它。但是我没有做其他任何事情,甚至没有使用。因此,我问的是如何正确地删除以避免任何内存泄漏等。

  • 问题内容: 我正在Django中构建一个Web应用程序。我有一个上传文件的模型,但是无法删除它。这是我的代码: 然后,在“ python manage.py shell”中执行以下操作: 它从数据库中删除,但不删除服务器上的文件。我还能尝试什么? 问题答案: 在Django 1.3之前,当你删除相应的模型实例时,文件会自动从文件系统中删除。你可能正在使用较新的Django版本,因此你必须自己实现从

  • 问题内容: 我有以下格式的json响应。 我相信json.net可以处理转义字符,因此我使用了以下代码将其反序列化为字典集合。 但是,此json解析引发异常“无效的属性标识符字符:。路径’[0]’,第1行,位置2”。我们可以通过处理json响应字符串来解决此问题吗? 问题答案: 在反序列化过程之前尝试。

  • 问题内容: 我知道我不应该改变输入,而应该克隆对象来改变它。我遵循在redux入门项目上使用的约定,该约定使用: 用于添加项目-我使用了点差将项目追加到数组中。 用于删除我使用的: 但这改变了输入状态对象-即使我要返回一个新对象,也禁止这样做吗? 问题答案: 不,永远不要改变你的状态。 即使您要返回一个新对象,您仍然会污染旧对象,而您从来不希望这样做。这使得在旧状态与新状态之间进行比较时会出现问题

  • 机器人不应该删除以前缀“!,-和~”开头的消息或来自机器人的消息。 机器人成功地删除了不正确的消息,但也删除了正确的消息。我怎么才能修好这个?

  • 问题内容: 我希望我的笔记应用程序能为您提供一些帮助。假设我的记事清单上有3个记事。我想删除列表顶部的注释。无论我尝试删除哪一个,始终会首先删除列表最底部的注释。我检查了React控制台,并且处于应用程序组件状态的notes数组表示已正确删除。但实际上,事实并非如此。如何获得它以便删除我选择的确切音符? 问题答案: 用作时发生此错误。React使用该属性来跟踪列表中的元素。当您从数组中间删除元素时