在 Django 中加入多对多表

Posted

技术标签:

【中文标题】在 Django 中加入多对多表【英文标题】:Join Many to Many tables in Django 【发布时间】:2017-11-24 02:10:29 【问题描述】:

我有三个模型,连接了多对多的关系

型号A - M:N - 型号B - M:N - 型号C

它们被定义为

ModelA
attA1
attA2

ModelB
attB1
att1s.ManyToManyField(ModelA)
att3s.ManyToManyField(ModelC)

ModelC
attC1
attC2

我想在服务器启动时存储这三个中的数据,而无需再次查询数据库 - 但我需要每个表中的所有数据。

我正在寻找的等效 SQL 是:

SELECT *
FROM ModelA, ModelB, ModelC
WHERE ModelA.pkA = ModelB.pkA AND ModelC.pkC=ModelB.pkC

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

给定:

class ModelA(models.Model):
    a = models.CharField(max_length=15)

class ModelC(models.Model):
    c = models.CharField(max_length=15)

class ModelB(models.Model):
    b = models.CharField(max_length=15)
    modela = models.ManyToManyField(ModelA)
    modelc = models.ManyToManyField(ModelC)

您可以通过遍历 ModelB 并像这样拉入 a 和 c 来列出所有关系:

ModelB.objects.values('modela__a', 'b', 'modelc__c')

在 Django shell 中验证

【讨论】:

以上是关于在 Django 中加入多对多表的主要内容,如果未能解决你的问题,请参考以下文章

Django:表多对多查询聚合分组FQ查询事务

6django操作表多对多实战

如何在 Django 中创建和链接多对多表?

如何在多对多表中添加列(Django)

Django中ORM多对多表的操作

创建多对多表关系的三种方式