这个问题可能是一个愚蠢的问题,但我需要从SO社区验证它。
我有2个型号。
class Address(models.Model):
name = models.CharField(max_length=100)
area = models.ForeignKey(Area, null=True)
class Area(models.Model):
name = models.CharField(max_length=20)
现在如果我想删除一个Address实例,它会删除它指向的Area对象的实例作为外键吗?
address = Address.objects.filter(...).delete()
PS:我知道Django中的on_delete功能。当删除外键对象时需要它,并且为了防止那些指向该外键的对象,使用此参数。就我而言,情况正好相反。
答案 0 :(得分:1)
不,它不会删除Area
行,因为它是一个foreignkey字段。
因此,在删除Address实例时,除非您覆盖模型的area
方法以删除实例,否则不会删除相应的delete
实例。
答案 1 :(得分:1)
Area
不会受到影响。但是,如果您删除了Area
,则会删除Address
(因为默认的on_delete
行为是级联的)。
答案 2 :(得分:0)
对于开始学习数据库操作的人来说,这是一个常见的疑问。
正如你所提到的,django中的on_delete是不同的。
首先我们应该了解外键是什么。它是另一个存储一组数据的表。假设我们有一个 address1 条目,区域为 area1 。同样,我创建了一个地址 address2 ,区域 area1 。现在,如果删除 address1 也删除了 area1 ,那么就无法实现另一个实例的关系概念。通常,外键只是在数据库中定义一个新模型。您必须通过覆盖默认方法来删除FK实例。否则它不会删除FK实例。