django many_to_many字段删除

时间:2018-05-08 12:02:42

标签: django django-models many-to-many django-orm

我有两个django模型,我想用多对多关系连接。请参阅以下示例:

tabBar.invalidateIntrinsicContentSize()
tabBar.superview?.setNeedsLayout()
tabBar.superview?.layoutSubviews()

我想弄清楚如果删除A或B的记录会发生什么?我想要发生的是M2M中的关系被删除,但另一个对象保持不变。假设A中的行被删除,那么B中的相关行应该保留,只有通过m2m关系的连接才会被删除。我在Django文档中找不到它。

2 个答案:

答案 0 :(得分:1)

通过建立一个m2m关系,你基本上可以创建另一个带有外键的表来建模A,另一个用于模型B(Django为你做的)。

默认情况下on_delete设置为models.CASCADE,这意味着如果您删除任何这些模型中的行,该关系也将被删除。 (您可以通过删除管理页面中的一行来确认它,您将看到一条消息,其中包含所有关系列表,这些消息也将被删除)

您可以自己创建一个表来管理这些内容,并使用through=将该表连接到模型。以您真正想要的方式管理m2m关系是一种很好的方式。

Doc:Many-to-many relationships

答案 1 :(得分:1)

是的,documentation中解释了它。

以下是相关部分:

  

如果我们删除某个出版物,其文章将无法访问它:

     

p1.delete()
  Publication.objects.all()   <QuerySet [<Publication: Highlights for Children>, <Publication: Science News>, <Publication: Science Weekly>]>
  a1 = Article.objects.get(pk=1)
  a1.publications.all()
  <QuerySet []>

     

如果我们删除文章,其出版物将无法访问它:

     

a2.delete()
  Article.objects.all()
  <QuerySet [<Article: Django lets you build Web apps easily>]>
  p2.article_set.all()
  <QuerySet []>

在您的情况下,Django将为模型 A B 以及中间表创建表格,这些表格未在模型中反映出来。删除类 A 的对象实例(记录)时,将删除表 A 中的关联行,以及中间表中的所有关联行。 B 表格不会受到影响。