使用以下相关模型(一个博​​客条目可以有多个修订版本):

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/

10-10 22:02