【问题标题】:How to get models.CASCADE in ManytoMany relationships in Django?如何在 Django 的多对多关系中获取 models.CASCADE?
【发布时间】:2020-04-20 12:11:06
【问题描述】:

我有 2 张桌子:

class Subject(models.Model):
    ....

class Season(models.Model):
    season = models.CharField(max_length=2, primary_key=True)
    subject = models.ManyToManyField(Subject)

当我删除 Subject 实例时,我也想要与删除相关的 Season 实例。如何在模型中做到这一点?

【问题讨论】:

标签: django django-models


【解决方案1】:

如果您确实需要ManyToMany 关系,那么这意味着许多Subjects 也可能有许多Seasons。

在多对多关系中,链接存储在一个中间表中,其中存储了两个链接记录的IDs。

如果删除SubjectSeason,所有与被删除项相关的记录都会自动从中间表中删除。

【讨论】:

  • 那么有一个中间表会记录变化吗?如果我更新季节,原始主题表中的数据会改变吗?还是只更改中间表?
  • @iscream 如果将Season 链接到Subject(反之亦然),它将在中间表中添加一行,其中包含以下数据:此表中行的id,id Season 的 ID,Subject 的 ID。仅此而已(除非您决定使用through 属性制作自己的中间表)。中间表仅存储(在您的情况下)“哪个Season 链接到哪个Subject”。因此,如果您更新 SeasonSubject,则只会在它们各自的表中进行更改
猜你喜欢
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2021-11-25
  • 2022-01-17
  • 2013-09-19
  • 2013-07-04
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多