繁体   English   中英

删除数据库中相互关联的值

[英]Deleting values connected to each other in the database

我的数据库 models.py 看起来像这样:

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    slug = models.SlugField(unique=True)
    description = models.TextField()
    quantity = models.IntegerField(default=1)

class Bike(models.Model):
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='bikes')

当我删除表Item的条目时,它也会删除表Bike关联的所有内容。 但是当我删除Bike表中的条目时,它不会删除Item表中的任何数据。 当您删除Bike表中的条目时,是否有可能删除Item表中的所有数据?

首先,您描述的行为(删除Item时删除Bike )对应于您在字段中放入的 CASCADE 参数:

item = models.OneToOneField(Item, on_delete=models.CASCADE)

你应该知道, CASCADE不是唯一可用的行为,你可以检查出来

但我认为他们中的任何一个都没有你想要的确切行为。 要实现此行为,您应该使用pre_delete 或 post_delete 信号 但最终在我看来这不是一个好的解决方案。

根据我的阅读,我明白BikeItem不仅仅是相关的。 他们是一样的东西。 你不应该用OneToOneField代表他们的关系(据我OneToOneField )。 Bike应该是Item的子Item以便Bike实例具有Item每个属性以及您想要专门用于Bike的属性。 使用此解决方案,您会发现事情更具可扩展性,并且模型的每次使用都将更加合乎逻辑。 您可以在 Django 文档中了解有关模型继承的更多信息。

如果我错了,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM