让我说我有一个模特书籍:
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中的任何条目?
答案 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
选项。