用外键删除Django中的对象

时间:2016-12-13 11:10:43

标签: django foreign-keys foreign-key-relationship

这个问题可能是一个愚蠢的问题,但我需要从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功能。当删除外键对象时需要它,并且为了防止那些指向该外键的对象,使用此参数。就我而言,情况正好相反。

3 个答案:

答案 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实例。