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