使用以下相关模型(一个博客条目可以有多个修订版本):
class BlogEntryRevision(models.Model):
revisionNumber = models.IntegerField()
title = models.CharField(max_length = 120)
text = models.TextField()
[...]
class BlogEntry(models.Model):
revisions = models.ManyToManyField(BlogEntryRevision)
[...]
当删除相应的
BlogEntryRevision
时,如何告诉Django删除所有相关的BlogEntry
?如果删除“另一”侧的对象,默认似乎是使对象保持多对多关系。有什么办法做到这一点-最好不要重写BlogEntry.delete
吗? 最佳答案
我认为您误解了多对多关系的性质。您谈论“相应的BlogEntry”被删除。但是ManyToMany的全部要点是,每个BlogEntryRevision都具有与其相关的多个BlogEntries。 (当然,每个BlogEntry具有多个BlogEntryRevisions,但您已经知道这一点。)
从您使用的名称以及您需要此删除级联功能的事实来看,我认为使用从BlogEntryRevision到BlogEntry的标准ForeignKey会更好。只要您不在该ForeignKey上设置null=True
,删除操作就会级联-删除BlogEntry时,所有修订也会一样。
自Django 2.0起ForeignKey
初始化程序现在需要您指定on_delete
参数:
from django.db import models
from .models import MyRelatedModel
class model(models.Model):
related_model = models.ForeignKey(MyRelatedModel, on_delete=models.CASCADE)
关于django - Django-ManyToManyRelation中的级联删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3937194/