当我删除django(postgress)中的模型时会删除什么?

时间:2018-01-12 01:21:17

标签: python django django-models django-migrations

让我说我有一个模特书籍:

class Books(models.Model):
    name = models.Charfield()
    author = models.Charfield()

后来我设置了另一个名为BookReviews的模型,该模型链接到Books:

class BookReviews(models.Model):
    book = models.ForeignKey(Books)
    content = models.TextField()

但我搞砸了,我想完全删除模型BookReviews。我跑的时候

  

python manage.py migrate

我收到一条警告信息:

  

外键与这些内容类型相关的任何对象也会   被删除。您确定要删除这些内容类型吗?

这是否意味着即使在BookReviews之前存在这些条目,也会删除链接到Books中的任何条目?

1 个答案:

答案 0 :(得分:0)

我想您对on_delete

中的ForeignKey选项感到疑惑
  

当删除ForeignKey引用的对象时,Django将模拟on_delete参数指定的SQL约束的行为。例如,如果您有一个可为空的ForeignKey,并且希望在删除引用的对象时将其设置为null:

删除Books对象时,由于BookReviews是默认的,因此删除了所有外国on_delete=models.CASCADE个对象。你的模型与下面相同

    class Books(models.Model):
            name = models.Charfield()
            author = models.Charfield()

    class BookReviews(models.Model):
            book = models.ForeignKey(
                    Books,
                    on_delete=models.CASCADE,
            )
            content = models.TextField()

如果您不想自动删除BookReviews,则可以使用其他on_delete选项,例如

    class BookReviews(models.Model):
            book = models.ForeignKey(
                    Books,
                    on_delete=models.SET_NULL,
                    blank=True,
                    null=True,
            )

django文档中有许多有用的示例,因此请查看here以获取更多信息。

  

P.S。在django 2.0版本之后,在编写FroeignKey字段时应该编写on_delete选项。