正在删除数据库中相互连接的值



我的数据库模型.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来表示他们的关系(在我看来(。Bike应该是Item的子级,以便Bike实例具有Item的每个属性以及您专门为Bike所需的属性。有了这个解决方案,你会发现事情的可扩展性更强,每次使用你的模型都会更合乎逻辑。您可以在Django文档中了解更多关于模型继承的信息。

如果我错了,请告诉我。

最新更新