[英]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 信号。 但最终在我看来这不是一个好的解决方案。
根据我的阅读,我明白Bike
和Item
不仅仅是相关的。 他们是一样的东西。 你不应该用OneToOneField
代表他们的关系(据我OneToOneField
)。 Bike
应该是Item
的子Item
以便Bike
实例具有Item
每个属性以及您想要专门用于Bike
的属性。 使用此解决方案,您会发现事情更具可扩展性,并且模型的每次使用都将更加合乎逻辑。 您可以在 Django 文档中了解有关模型继承的更多信息。
如果我错了,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.