我有两个django模型,我想用多对多关系连接。请参阅以下示例:
tabBar.invalidateIntrinsicContentSize()
tabBar.superview?.setNeedsLayout()
tabBar.superview?.layoutSubviews()
我想弄清楚如果删除A或B的记录会发生什么?我想要发生的是M2M中的关系被删除,但另一个对象保持不变。假设A中的行被删除,那么B中的相关行应该保留,只有通过m2m关系的连接才会被删除。我在Django文档中找不到它。
答案 0 :(得分:1)
通过建立一个m2m关系,你基本上可以创建另一个带有外键的表来建模A,另一个用于模型B(Django为你做的)。
默认情况下on_delete
设置为models.CASCADE
,这意味着如果您删除任何这些模型中的行,该关系也将被删除。 (您可以通过删除管理页面中的一行来确认它,您将看到一条消息,其中包含所有关系列表,这些消息也将被删除)
您可以自己创建一个表来管理这些内容,并使用through=
将该表连接到模型。以您真正想要的方式管理m2m关系是一种很好的方式。
答案 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 表格不会受到影响。